作为优秀的持久层框架,在开发中作用非常大,到这里我们就开始了mybatis的学习,马上来到了我们ssm框架学习的最后一步。
这里具体讲操作方式:
目录
1. 导入mybatis的坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
在使用mybatis时,我们驱动肯定也是需要导入的。
2. 配置映射文件和核心配置文件
这里列出我们需要知道的几点
1. 这两个文件都是xml文件
2. 都是我们使用mybatis时必不可少的配置文件
3.都需要自己写上约束头
映射文件的约束头:
<?xml version="1.0" encoding="UTF-8"?>
<!--约束头自己导入,可以参考这个,这是使用mybatis时的映射配置文件-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
根标签是<mapper>
核心配置文件的约束头:
<?xml version="1.0" encoding="UTF-8"?>
<!--mybatis的核心配置文件的约束头,可以直接用-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
根标签是<configuration>
这些都准备好后,才正式开始编写配置文件,首先是映射文件,这里起了名字叫做usermapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--约束头自己导入,可以参考这个,这是使用mybatis时的映射配置文件-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--必须要配mapper映射,给个命名空间方便调用语句,使用findAll的语句的方法就是:usermapper.findAll,对应的结果封装在resultType里-->
<mapper namespace="usermapper">
<!-- 语句里是from表-->
<!-- 删除操作 这里得到一个int类型的id即可,所有参数类型是int的全包名,当传递的参数只有一个单值,没有属性时,#{}里属性名随意,反正后面只能取到这个参数本身-->
<delete id="delete" parameterType="java.lang.Integer">
delete from tb_user where id=#{id}
</delete>
<!-- 修改操作-->
<update id="update" parameterType="com.dzy.model.User">
update tb_user set username=#{username},password=#{password} where id=#{id}
</update>
<!-- 插入操作 这用parameterType设置的类来匹配填入,通过#{}的方法,内部填对应的属性名-->
<insert id="insert" parameterType="com.dzy.model.User">
insert into tb_user values(#{id},#{username},#{password})
</insert>
<!-- 查询操作-->
<select id="findAll" resultType="com.dzy.model.User">
select * from tb_user
</select>
</mapper>
首先mapper标签后面加上namespace属性,自己指定一个名字,作用可以看注释,这里包含了增删改查的操作,不同的标签,不同的匹配属性,不同的sql语句,可以有不同的id。
有时候我们会觉得写 parameterType或者resultType,一大串原包名太麻烦了,这是就可以用下面的方法来定义别名:(typeAliases这个标签需要在核心配置文件下作为第一个标签或者在properties标签后,environments标签前才可生效。)
此外:
核心配置文件配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--mybatis的核心配置文件的约束头,可以直接用-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--根标签时configuration-->
<configuration>
<!-- 配置数据源环境-->
<!-- 环境可以有很多个数据源环境,最外层的default是指名默认用哪一个环境-->
<environments default="develop">
<environment id="develop">
<!--配置这个数据源环境的事务管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--配置这个数据源的类型:这里是数据池思想,配POOLED-->
<dataSource type="POOLED">
<!--这里配置数据库连接老四样,都是老面孔了-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/taobao"/>
<property name="username" value="root"/>
<property name="password" value="dzy2001818"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件:核心配置文件需要知道映射文件在哪里,这里加载mapper文件时路径中用/-->
<mappers>
<mapper resource="usermapper.xml"/>
</mappers>
</configuration>
这里主要是配置我们数据源的环境,属性,事务控制器类型,以及后面指定使用的mapper(映射文件)有哪些,这样后面才可以使用到我们映射文件里编写的sql语句,这里的四个连接的property都可以用引入properties文件的方法:
3. 业务中具体使用
这里未与spring整合起来,所以代码比较繁琐,但是可以掌握一下,等到后期整合简化后容易理清来龙去脉,先放代码:
@Test//查询
public void test1() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperconfig.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//通过工厂对象获得会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过session我们执行操作 这里的参数就是:namespace+id,查操作
List<User> list=sqlSession.selectList("usermapper.findAll");//这里是执行查询语句后将查询到的对象们变为列表
//打印
System.out.println(list);
//释放资源——session
sqlSession.close();
}
@Test//插入
public void test2() throws IOException {
//模拟这里得到了一个要插入的user对象
User user =new User();
user.setId(6);
user.setUsername("dzy");
user.setPassword("1234566");
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapperconfig.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//通过工厂对象获得会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//通过session我们执行操作 这里的参数就是:namespace+id,插入操作,这里的user要传参直接写后面,insert接收两个参数
sqlSession.insert("usermapper.insert",user);
//mybatis如果需要更新数据库需要进行事务的提交操作
sqlSession.commit();
//释放资源——session
sqlSession.close();
}
这里先放的查和增的业务代码,首先需要明白,使用mybatis来操作数据库时,是通过sqlSession这个会话对象来操作的,而这个对象是sqlSessionFactory这个工厂来制造的,然后这个工厂需要一个核心是通过inputstream的对象来建造(bulid)的。
会话创建好之后,有各种操作可以用,全套增删改查,具体可以参照上面的代码,然后可以看到,操作后面的括号里就是我们之前的命名空间和设置的sql的id,这里就是他的引用方式,然后后面就是需要传入的参数对象,当然查询操作不需要传参,他就没有参数对象,然后我们需要提交事务,但是不改变数据库的可以不用提交事务,最后我们要释放资源,将会话关闭。
整体的mybatis原始开发流程就是这样。