mybatis基本项目搭建
第一步.新建数据库,导入依赖
1.新建数据库表,user
2.导入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
第二步.新建pojo实体类,user类
//新建用户实体类user
package pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer userId;
private String userName;
private String userEmail;
private Integer countryId;
private Integer depId;
private Integer version;
private Integer deleted;
}
第三步:.新建mapper类和xml文件
//用户类接口 userMapper package mapper; import pojo.User; import java.util.List; import java.util.Map; public interface UserMapper { public List<User> getUserList(); public List<User> getUserList2(); public User getUser(Integer id); public Integer addUser(User user); public Integer addUser2(Map<String,Object> map); public void updateUser(User user); public void deleteUser(Integer id); }
//用户接口的xml文件 userMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--绑定一个操作数据库的接口-->
<mapper namespace="mapper.UserMapper">
<!--查询 -->
<!--本来这里的resultType要写全限定类名,但是在mybaits-config.xml文件中配置了别名user后,这里可以直接写user-->
<select id="getUserList" resultType="user">
select * from user
</select>
<!--使用resultmap 解决实体类和数据库字段不一致的问题,这里我故意把实体类的email 改为userEmail -->
<resultMap id="userMap" type="user">
<!-- column是数据库中的字段名, property是实体类的属性 -->
<result column="email" property="userEmail"></result>
</resultMap>
<select id="getUserList2" resultMap="userMap">
select * from user
</select>
<select id="getUser" parameterType="Integer" resultType="user">
select * from user where userId=#{id}
</select>
<!-- parameterTypes 是一个实体类,那么sql 语句里面的参数必须和实体类的属性一致-->
<insert id="addUser" parameterType="user" >
insert into user (userId,userName) values(#{userId},#{userName})
</insert>
<!-- //parameterTypes 是一个hashmap,那么sql 语句里面的参数不用和实体类的属性一致-->
<insert id="addUser2" parameterType="map" >
insert into user (userId,userName) values(#{uId},#{uName})
</insert>
<update id="updateUser" parameterType="pojo.User">
update user set userName=#{userName},email=#{email} where userId=#{userId}
</update>
<delete id="deleteUser" parameterType="Integer">
delete from user where userId=#{userId}
</delete>
</mapper>
第四步:新建连接的工具类
package myUntil; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUntil { private static SqlSessionFactory sqlSessionFactory; static { try { //使用mybatis 第一步,获取sqlSessionFactory对象,这个对象时生成sqlSession的 String resource= "mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //有了sqlSessionFactory,我们既可以用sqlSessionFactory来open 一个个的sqlSession //sqlSession是可以操作数据库,他包含了所有的sql 语句操作 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
第五步:新建mybatis 的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置日志文件 -->
<settings>
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="logImpl" value="log4j"/>
<!-- 开启驼峰命名 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- <properties resource="db.properties"/>-->
<!--别名 -->
<typeAliases>
<!-- <!–设置User类的别名为user –>-->
<!-- <typeAlias type="pojo.User" alias="user"></typeAlias>-->
<!-- 设置pojo包下的所有实体类的别名为类名的首字母小写 -->
<package name="pojo"/>
</typeAliases>
<environments default="develoment">
<environment id="develoment">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://47.112.227.192:3306/spring?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--每一个mapper 都要在mybatis 的核心配置文件中注册 -->
<mappers >
<!-- 用resource映射的话就用全路径-->
<mapper resource="mapper/studentMapper.xml"></mapper>
<!-- <mapper resource="mapper/studentMapper.xml"></mapper>-->
<!-- 用class 映射的话,要用接口的类的全限定类名 -->
<!-- <mapper class="mapper.StudentMapper"></mapper>-->
<mapper resource="mapper/teacherMapper.xml"></mapper>
</mappers>
</configuration>
第六步:新建log4j.properties文件
### 设置### log4j.rootLogger = debug,console,file ### 输出信息到控制抬 ### log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold = DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出DEBUG 级别以上的日志到=E://logs/error.log ### log4j.appender.file = org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File = ./logs/log.log log4j.appender.file.Append = true log4j.appender.file.MaxFilesSize=10mb log4j.appender.file.Threshold = DEBUG log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 日志输出级别 ### log4j.logger.org.mybatis =debug log4j.logger.java.sql =debug log4j.logger.java.sql.Statement =debug log4j.logger.java.sql.ResultSet =debug log4j.logger.java.sql.Preparedstatement =debug
第七步:新建测试
package test; import com.sun.istack.internal.logging.Logger; import mapper.UserMapper; import myUntil.MybatisUntil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import pojo.User; import java.util.HashMap; import java.util.List; public class Mytest { static Logger logger=Logger.getLogger(UserMapper.class); //查询所有用户的方法 @Test public void getUserList(){ //通过我们自己编写的工具类获取sqlSession对象 SqlSession sqlSession=MybatisUntil.getSqlSession(); //通过getMapper获取接口 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserList(); for (User user : userList) { System.out.println(user); } //这里记得关闭,不然会造成资源浪费 sqlSession.close(); } //查询所有用户的方法,实体类把email改为userEmail,然后在xml 加resultMap @Test public void getUserList2(){ //通过logger 输出日志 logger.info("进入了这个方法"); //通过我们自己编写的工具类获取sqlSession对象 SqlSession sqlSession=MybatisUntil.getSqlSession(); //通过getMapper获取接口 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserList2(); for (User user : userList) { System.out.println(user); } //这里记得关闭,不然会造成资源浪费 sqlSession.close(); } //查询单个用户的方法 @Test public void getUser(){ //通过我们自己编写的工具类获取sqlSession对象 SqlSession sqlSession=MybatisUntil.getSqlSession(); //通过getMapper获取接口 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); User user=userMapper.getUser(1); System.out.println("user:"+user); sqlSession.close(); } //添加用户的方法(参数用实体类,这样的话,xml里面的字段必须和实体类的字段一致) @Test public void addUser(){ //通过我们自己编写的工具类获取sqlSession对象 SqlSession sqlSession=MybatisUntil.getSqlSession(); //通过getMapper获取接口 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); User user=new User(); user.setUserId(10); user.setUserName("甚平"); userMapper.addUser(user); System.out.println("加入用户成功"); //提交事务,低版本不会自动提交事务 sqlSession.commit(); sqlSession.close(); } //添加用户的方法(参数用map类,这样的话,xml里面的字段不用和实体类的字段一致) @Test public void addUser2(){ //通过我们自己编写的工具类获取sqlSession对象 SqlSession sqlSession=MybatisUntil.getSqlSession(); //通过getMapper获取接口 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); HashMap<String,Object> hashMap=new HashMap<String, Object>(); hashMap.put("uId",20); hashMap.put("uName","四皇凯多"); userMapper.addUser2(hashMap); System.out.println("加入用户成功"); //提交事务,低版本不会自动提交事务 sqlSession.commit(); sqlSession.close(); } //更新用户的方法 @Test public void updateUser(){ //通过我们自己编写的工具类获取sqlSession对象 SqlSession sqlSession=MybatisUntil.getSqlSession(); //通过getMapper获取接口 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); User user=new User(); user.setUserId(10); user.setUserName("海侠甚平22222"); user.setUserEmail("hxsp@qq.com"); userMapper.updateUser(user); System.out.println("更新成功"); } //删除用户的方法 @Test public void deleteUser(){ //通过我们自己编写的工具类获取sqlSession对象 SqlSession sqlSession=MybatisUntil.getSqlSession(); //通过getMapper获取接口 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); userMapper.deleteUser(2); System.out.println("删除成功"); sqlSession.commit(); sqlSession.close(); } }

浙公网安备 33010602011771号