Java学习记录——Mybatis框架
Mybatis简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
相比起传统的JDBC,使用Mybatis可以减少代码量,使开发效率更加高效
Mybatis配置
1.导入mybatis的相关jar包
ant-launcher-1.10.3.jar
ant-1.10.3.jar
cglib-3.2.10.jar
asm-7.0.jar
commons-logging-1.2.jar
javassist-3.24.1-GA.jar
log4j-api-2.11.2.jar
log4j-1.2.17.jar
log4j-core-2.11.2.jar
mybatis-3.5.2.jar
mysql-connector-java-8.0.17.jar
ognl-3.2.10.jar
slf4j-api-1.7.26.jar
slf4j-log4j12-1.7.26.jar
下载地址:https://github.com/mybatis/mybatis-3/releases
导入了这些jar包并添加到环境变量后就可以开始使用Mybatis了
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
2.编写Mybatis的配置文件
Mybatis的配置文件为xml文件格式
XML 配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)
下面是一个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 type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="entity/peo.mapper.xml" />
</mappers>
</configuration>
代码中间那四个property对应的就是数据库的相关配置,将自己的配置信息填入value就行了
下面的mapper属性指的是sql语句的映射文件,后面会讲到
3.构建 SqlSessionFactory并中获取 SqlSession
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
public class MybatisUtil {
public static SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "Mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
当构建好了SqlSessionFactory,就可以从SqlSessionFactory中获取到SqlSession
public static SqlSession getSession() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
return session;
}
SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
4.编写实体类
这个很简单就自己去写好了,记得要去数据库创建好相对应的数据表,表中的属性和实体类中的成员变量需要有对应
比如:
public class Peo {
private int id;
private String name;
}
对应的mysql数据库:
5.编写sql语句的映射文件
SQL 映射文件也是xml文件格式
SQL 映射文件主要的顶级元素为:
insert – 映射插入语句
delete – 映射删除语句
select – 映射查询语句
update – 映射更新语句
对应就是增删查改
下面是一个例子:
<?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="entity.PeoMapper">
<select id="selectAll" resultType="entity.Peo">
select * from peo
</select>
<select id="selectPeo" resultType="entity.Peo">
select * from peo where id = #{id}
</select>
<insert id="addPeo" parameterType="entity.Peo" useGeneratedKeys="true">
insert into peo(name) value(#{name})
</insert>
<update id="updatePeo" parameterType="entity.Peo">
update peo set name = #{name} where id = #{id}
</update>
<delete id="deletePeo">
delete from peo where id=#{id}
</delete>
</mapper>
6.创建dao层
在dao层里,将对数据库的操作进行封装,便后续的使用。
public List<Peo> selectAll() throws IOException {
SqlSession session = MybatisUtil.getSession();
List<Peo> list = session.selectList("entity.PeoMapper.selectAll");
session.close();
return list;
}
public Peo getById(int id) throws IOException {
Peo p = new Peo();
SqlSession session = MybatisUtil.getSession();
p = session.selectOne("entity.PeoMapper.selectPeo", id);
session.close();
return p;
}
public int add(Peo p) throws IOException {
SqlSession session = MybatisUtil.getSession();
int result = session.insert("entity.PeoMapper.addPeo", p);
session.commit();
session.close();
return result;
}
public int update(Peo p) throws IOException {
SqlSession session = MybatisUtil.getSession();
int result = session.update("entity.PeoMapper.updatePeo", p);
session.commit();
session.close();
return result;
}
public int delete(int id) throws IOException {
SqlSession session = MybatisUtil.getSession();
int result = session.delete("entity.PeoMapper.deletePeo", id);
session.commit();
session.close();
return result;
}
对于每一个方法,基本就是先获取session,也就是连接数据库,然后再进行对数据库的操作,因为session里面包含了面向数据库执行 SQL 命令所需的所有方法,所以可以很方便的直接调用。
注意:一定要记得写上session.commit();
这一句,不然操作是不会执行的,最后还需要执行session.close();
来关闭连接与数据库的连接,这里涉及到很多安全上的问题,可以去了解一下
7.测试
当完成了以上的操作,就可以对mybatis进行测试了。
public class Test {
public static void main(String[] args) throws IOException {
PeoDao peodao = new PeoDao();
List<Peo> list = new ArrayList<Peo>();
list = peodao.selectAll();
for (Peo peo : list) {
System.out.println(peo);
}
}
}
我这里执行的是查询方法,可以见到命令行上已经将数据库的所有信息打印了出来:
总结
本文讲述了mybatis的简单搭建和使用方法,mybatis的功能不仅仅只有文章中所展示的这些,还有非常多强大的功能,建议多看看mybatis的官方文档,在日后会继续学习mybatis的其他功能。