本篇纪录的是mybatis的快速上手和基本知识点,方便知识review,不足之处后续会不断补充,感谢您的阅览!
Apache的一个开源项目iBatis
是一个基于Java的持久层框架,简化原生的JDBC的大段代码
轻量级,性能出色
1.导入Mybatis的核心依赖
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
2.创建MyBatis的核心配置文件
maven的情况下,在resource文件夹下面创建其核心配置文件
<?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>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
如果是由Spring的话,它是交给了Spring管理的,什么连接池,数据源都写在yml配置文件中去了
3.根据数据库中的表字段创建pojo包下的实体类
一个pojo示例对应的是一张表
4.创建一个mapper包,做持久层
根据pojo实体类创建对应的mapper接口
比如实体类为User 就是UserMapper
public interface UserMapper {
/**
* 添加用户信息
*/
int insertUser();
}
其中添加了一个insert方法作为新增操作的方法
5.在resource/mappers下创建mapper的映射文件
表——实体类——映射文件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.atguigu.mybatis.mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'张三','123',23,'女')
</insert>
</mapper>
下面是两个一致比较重要
6.核心配置中引入xml映射文件
7.调用接口,测试功能
这里虽然新增数据的业务代码是写完了,但是没人调啊,不跟项目中一样,有业务层,然后调用它,所以这里我写一个junit测试来调用mapper的方法,来操作数据库
public class UserMapperTest {
@Test
public void testInsertUser() throws IOException {
//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取sqlSession,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession = sqlSessionFactory.openSession();
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//提交事务
//sqlSession.commit();
System.out.println("result:" + result);
}
}
至此,mybatis的一个基本的demo就完成了,实现了新增数据的功能,当调用mapper接口时,会映射到mapper.xml,xml中执行sql语句。
8.事务的自动提交
其他的crud操作基本类似,创建操作方法,是修改还是删除等,然后在该mapper的映射xml中书写对应的SQL语句,语句id绑定方法名,这样调用该方法时才知道执行的是哪条SQL
都是在xml种写crud的简单sql,没什么好说的
添加
<insert id="insertUser">
insert into t_user values(null,'admin','123456',23,'男','[email protected]')
insert>
删除
<delete id="deleteUser">
delete from t_user where id = 6
delete>
修改
<update id="updateUser">
update t_user set username = '张三' where id = 5
update>
查询一个实体类对象
<select id="getUserById" resultType="com.atguigu.mybatis.bean.User">
select * from t_user where id = 2
select>
查询集合
<select id="getUserList" resultType="com.atguigu.mybatis.bean.User">
select * from t_user
select>
但是对于查询的返回值接收而言,有些许变化
换成在properties中设置数据库连接配置信息
设置完后,需要把设置好的properties文件给引入到mybatis的核心配置文件中去
原来的读取配置信息换成下面这种${ }的方式来读取
这里resultType接收类型一直写全路径类名很累,搞轻松点就是给这个全路径类名起一个简单的别名,这样即使查询sql多了,也不至于那么累
再看看效果
第二种方式是更为常用的
用package标签,把pojo包下的所有类都设置为默认的别名(不写别名,就设置为默认),就是类名本身,这样下来包下所有类都设置好了,免得我一个一个设置,又轻松不少
以包为单位,将包下所有的类型设置默认的类型别名
核心配置文件引入映射文件也可以如上操作,批量引入
创建这个包的时候,中间以 / 分隔,而非 .
(搞错了上面不是.xml而是.mapper,接口和映射的包名需一致),这样才能以包为单位批量引入
对于每个demo的mybatis设置都要做这几步,很浪费时间,如果创建为模板,则一创建就初始化好了,岂不美哉
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>
<!-- 引入jdbc配置文件信息-->
<properties resource="jdbc.properties"/>
<!-- 配置别名-->
<typeAliases>
<!-- 给实体类设置别名-->
<package name=""/>
</typeAliases>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<!-- 以包为单位,将包中的xml文件全部引入-->
<package name="com.mapper"/>
</mappers>
</configuration>
把这些代码复制,然后按下面操作
在setting中打开
这里添加一个mybatis-config的模板
如此我们还可以做一个mapper的模板,这样mapper前面的那一大段我们也不用写了
对于mapper的代码也是如上操作设置为模板
<?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>