以前我们都是用jdbc来将我们的java程序与数据库相连接,而MyBatis是对jdbc的一个封装。
MyBatis框架的引入
JDBC的问题:
- 数据库连接频繁创建、关闭,浪费数据库的资源,影响操作效率。
解决方法:使用数据库连接池如c3p0. - 改sql就要改java代码,然后需要重新编译,不易维护。
解决方法:将sql语句统一配置在文件中,就不需要改java - 我们通过preparedStatement对象向占位符设置参数,系统不易维护。
解决方法:将sql中的占位符及对应的参数类型配置在配置文件中,能自动输入的映射。
4.遍历查询结果集存在硬编码(列名)。解决方法:自动进行sql查询结果向java对象的映射(输出映射)。
为了解决这些问题,所以出现了MyBatis框架。
MyBatis介绍
通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
1、准备开发环境
导入jar包:mybatis-3.1.1.jar(低于这个版本的jar包需要导入很多依赖包)和mysql-connection-java,创建数据库和相应的表,SQL脚本如下:
create database mybatis;
use mybatis;
create table user(
id int primary key auto_increment,
username varchar(50),
birthday date,
sex varchar(20),
address carchar(50)
);
insert into user values(null,'xxw','1996-10-17','male',null);
insert into user values(null,'wyr','1997-04-24','female',null);
2、使用MyBatis查询表中数据(通过id查询)
添加Mybatis的配置文件SqlMapConfig.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>
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名字?characterEncoding=utf-8"/>
<property name="username" value="账号"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="userMapper.xml"/>
</mappers>
</configuration>
定义表所需要的实体类User.java
public class User{
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
//getter and setter and toString()
}
定义操作user表的sql映射文件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="chowing">
<select id="findUserById" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
</mapper>
在SqlMapConfig文件中注册User.xml文件,添加一个<mappers></mappers>字段,并在里面传入User.xml文件路径。
<configuration>
.....
<mappers>
<mapper resource="userMapper.xml"/>
</mappers>
</configuration>
接下来我们借助junit.jar包来编写的测试类
public class MyBatisFirst {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws IOException {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
}
@Test
public void testFinMemberById() {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = null;
try {
user = sqlSession.selectOne("chowing.findUserById", "1");
} catch (Exception e) {
e.printStackTrace();
}
sqlSession.close();
}
}
网友评论