Mybatis整合案例
一、单独使用Mybatis
项目目录结构大致为:
这里有两个UserDao.xml,是为了在mybatis-config.xml,配置映射扫描的使用替换选择
Ⅰ、创建项目
1.1 新建一个Maven项目,直接next
1.2 设置报名、文件所在位置信息等,然后finish
Ⅱ、导入依赖
<dependencies>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mysql连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!--日志 / 可以不用-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>compile</scope>
</dependency>
</dependencies>
Ⅲ、创建mybatis-config.xml
- 在Resource目录下新建mybatis-config.xml文件,文件内容如下
<?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="mapUnderscoreToCamelCase" value="true"/>
<!-- 日志打印 / 可以不用,没导入log4j依赖就不用配置 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<!-- 开启别名 -->
<typeAlias type="com.balalaenergy.pojo.User" alias="user"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&autoReconnect=true&allowMutiQueries=true&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 映射器,需要注意的是,如果配置包扫描映射, -->
<!-- xml所放的位置一定也是resources下的com.balalaenergy.dao包下 -->
<!-- 也就是一定要和java目录下的目录就够要一致,必须完全一致 -->
<!-- 不然会抛出BindingException异常 -->
<mappers>
<!-- <package name="com.balalaenergy.dao"/>-->
<mapper resource="mapper/UserDao.xml"/>
</mappers>
</configuration>
这里特别说明一下如果配置包扫描,一定要保证resource下的包名与java目录的一直,还有一个小坑,resource目录下创建文件夹的时候不能用“.”去分割包,只能一层一层的单独创建
Ⅳ、配置log4j.properties
在resource目录下创建log4j.properties文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=D:\\java\\log\\mybatis-test\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
Ⅴ、新建User实体类、UserDao、UserDao.xml
5.1 User实体类
/**
* @author :BalalaEnergy
* @date :Created in 2021/4/10 16:47
* @description:注意这里没有Getter、Setter方法,是因为使用了Lombok插件,需要导入lombok依赖以及安装插件
* @modified By:
*/
@Data
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
private Integer sex;
}
5.1 UserDao
/**
* @author :BalalaEnergy
* @date :Created in 2021/4/10 16:51
* @description:
* @modified By:
*/
public interface UserDao {
/**
* 添加用户
* @param user
*/
void addUser(User user);
/**
* 通过用户ID删除用户
* @param id
*/
void delUserById(Integer id);
/**
* 查询所用用户信息
* @return
*/
List<User> findAllUser();
}
5.2 UserDao.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="com.balalaenergy.dao.UserDao">
<resultMap id="userResult" type="com.balalaenergy.pojo.User">
<id property="id" column="id" jdbcType="INTEGER"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="sex" column="sex"/>
</resultMap>
<insert id="addUser" parameterType="com.balalaenergy.pojo.User">
insert into user(name, age, sex) value (#{name}, #{age}, #{sex})
</insert>
<delete id="delUserById" parameterType="integer">
delete from user where id=#{id}
</delete>
<select id="findAllUser" resultMap="userResult">
select * from user;
</select>
</mapper>
注意:mybatis的mapper文件是通过namespace来与mapper相对应的,一定要保证namespace正确,才能正常使用(这里mapper和dao差不多一个意思,个人习惯而已)
Ⅵ、新建MybatisUtil
/**
* @author :BalalaEnergy
* @date :Created in 2021/4/10 21:48
* @description:使用工厂模式,通过此工具类获取SqlSesion的实例对象
* @modified By:
*/
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
private static final String resource = "mybatis-config.xml";
static {
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e){
e.printStackTrace();
}
}
/**
* 获取sqlSession
* @return
*/
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
Ⅶ、创建测试类:TestMybatis
/**
* @author :BalalaEnergy
* @date :Created in 2021/4/10 21:28
* @description:
* @modified By:
*/
public class TestMybatis {
@Test
public void findAllUser(){
SqlSession sqlSession = MybatisUtil.getSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> users= userDao.findAllUser();
System.out.println(users);
sqlSession.close();
}
}
Ⅵ、测试结果
Ⅶ、总结
本案例是一个简单的MyBatis的使用案例,没有涉及到复杂的业务逻辑,本文总共写了三个接口,查询所有用户(findAllUser)、通过用户ID删除用户(delUserById)、添加用户(addUser),在测试代码中我只是测试了最简单的一个查询所有用的接口,剩余两个接口大家可以自行进行测试。
注意,添加、修改操作记得要提交事务,也就是加上这一句
sqlSession.commit();
要不然你会发现你操作没什么问题,数据库没什么反应,这让我想起了一个笑话:
夏日炎炎,老师在讲台上兴致勃勃的传道授业,突然发现一女同学在打瞌睡,于是把她叫了起来,怒斥者说到,我在上面拼死拼活,你却在下面一动不动。
- 后续持续更新spring + mybatis的整合案例