MyBatis
原始JDBC操作
// 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 获得连接 url user root
Connection connection = DriverManager.getConnection("jdbc:mysql:///test","root","password");
// 获得 statement statement与PrepareStatement 都是执行sql查询的API之一
PrepareStatement statement = connection.prepareStatement("select id,username,password from user");
// 执行查询
ResultSet resultSet = statement.executeQuery();
// 遍历结果集
while(resultSet.next()){
// 封装实体
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
//user实体封装完毕
System.out.println(user);
}
// 释放资源
resultSet.close();
statement.close();
connection.close();
MyBatis开发步骤
-
添加MyBatis坐标(添加相关的依赖)
-
创建user数据表
-
编写user实体
-
编写映射文件UserMapper.xml(主要描述的是sql语句)
-
编写核心文件SqlMapConfig.xml
-
编写测试类
<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies>
2…
3…
4.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>
</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="userMapper">
<select id="findAll" resultType="com.lxz.User">
select * from user
</select>
</mapper>
namespace为命名空间,调用文件时先找到命名空间的名,再找其下面对应的sql语句。mybatis帮我执行了这个代码以后会返回一个实体集,而resultType就是接收这个实体集的对象(将结果封装到了resultType指定的结果集里)。
5.配置一些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>
<!-- 数据源环境-->
<environments default="development">
<environment id="development">
<!-- transactionManager 事物管理器-->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件-->
<mappers>
<mapper resource="com.lxz.mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
6.编写测试代码:
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作 参数: namespace+id
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印数据
System.out.println(userList);
//释放资源
sqlSession.close();
-
mybatis映射文件概述
-
mybatis插入操作
- mybatis删除操作
- 删除操作使用delete标签
- Sql语句中使用#{任意字符串}方式引用传递的单个参数
- 删除操作使用的API是sqlSession.delete(“命名空间.id”,Object);
mybatis增删改查知识总结
List<User> userList = sqlSession.selectList("userMapper.findAll");
<!-- 查询操作 结果类型-->
<select id="findAll" resultType="com.lxz.User">
select * from user
</select>
sqlSession.insert("userMapper.save",user);
<!-- 插入操作 参数类型-->
<insert id="save" parameterType="com.lxz.User">
insert into user values(#{id},#{username},#{password})
</insert>
sqlSession.update("userMapper.update",user);
<!-- 修改操作-->
<update id="update" parameterType="com.lxz.User">
update user set username=#{username},password=#{password} where id=#{id}
</update>
sqlSession.delete("userMapper.delete",5);
<!-- 删除操作-->
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
注意:以上的增删改查都是一些最基础的CRUD操作,不涉及多表查询和连表查询。
Mybatis核心配置文件概述
Mybatis核心配置文件层级关系
-
enviroment标签解析
-
mapper标签解析
- Properties标签
在实际的开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件。
- typeAliases标签
该标签用于定义别名
<!-- typeAliases 自定义别名标签-->
<typeAliases>
<typeAlias type="com.lxz.User" alias="user"/>
</typeAliases>
注意该标签在mybatis核心配置文件中的顺序
Mybatis相应API
- SqlSession工厂构造器SqlSessionFactoryBuilder
常用API:SqlSessionFactory build(InputStream inputStream)
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象
SqlSessionFactory有多个方法创建SqlSession实例。常用的有如下两个:
方法 | 解释 |
---|---|
openSession() | 会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中 |
openSession(booleanautoCommit) | 参数为是否自动提交,如果设置为true,那么不需要手动提交事务 |
- SqlSession会话对象
SqlSession实例在mybatis中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器的实例方法。