Mybatis学习第一天
程序员文章站
2024-03-08 16:16:34
...
Mybatis学习第一天
学习内容:
- mybatis框架介绍
- mybatis的快速入门
- mybatis的mapper代理模式
什么是mybatis?
在软件开发中,我们一般分为三层架构,dao,service,servlet。mybatis其实就是dao层的一个框架,是一个半自动化的ORM框架。
那么问题来了什么是ORM
ORM是指 Object-Relationship-Mapping,对象关系映射,通俗的讲就是将数据库中的数据取出来,以实体类的形式来存储。
为什么要使用mybatis,优势在哪里?
优势
1. 可以简化代码,去除重复繁琐的代码;
2. 可以自动完成对象和数据库数据的转换;
3.支持缓存机制以及动态sql
4.支持将表与表之间的关系转换为实体与实体之间的关系
mybatis框架的必要组成部分:
- 实体类对象
- mybatis的主配置文件
- Dao接口
- 映射配置文件
mybatis框架的工作流程
入门案例的书写(未使用Mapper代理模式)
1.准备数据库
2.导入mybatis框架所需要的jar包,我这里使用的是maven工程,所以只用引入坐标
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
当然,既然是dao层的框架,自然是要对数据库进行操作,所以也不要忘记导入数据库连接驱动。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
//其他用得上的jar包我也一并导入了
//日志
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
//单元测试
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
3.书写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="mysql">
<environment id="mysql">
<!--p配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件是每个DAO独立的配置文件-->
<mappers>
<mapper resource="com/qzf/UserMapper.xml"/><!--这里一定要使用反斜杠分割-->
</mappers>
</configuration>
4.书写映射配置文件
<?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="s">
<select id="test1" resultType="com.domain.MyUser">
select * from user;
</select>
</mapper>
5.书写测试类:
public static void main(String[] args) throws IOException {
//1.加载配置文件
InputStream in = Resources.getResourceAsStream("MybatisConfig.xml");
//2.创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//3.创建sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行sql语句
List<MyUser> test1 = sqlSession.selectList("test1");
System.out.println(test1);
}
打印结果:
2019-10-08 21:23:01,583 0 [ main] DEBUG ache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2019-10-08 21:23:01,772 189 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,772 189 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,772 189 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,772 189 [ main] DEBUG source.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,918 335 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection
2019-10-08 21:23:02,278 695 [ main] DEBUG source.pooled.PooledDataSource - Created connection 1234776885.
2019-10-08 21:23:02,278 695 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [aaa@qq.com]
2019-10-08 21:23:02,281 698 [ main] DEBUG s.test1 - ==> Preparing: select * from user;
2019-10-08 21:23:02,308 725 [ main] DEBUG s.test1 - ==> Parameters:
2019-10-08 21:23:02,360 777 [ main] DEBUG s.test1 - <== Total: 6
[MyUser{id=1, username='阿水', birthday=Tue May 02 00:00:00 CST 2017, sex='女', address='山西太原'}, MyUser{id=5, username='李晓雨', birthday=Thu Dec 13 00:00:00 CST 2018, sex='男', address='山西大同'}, MyUser{id=6, username='ningque', birthday=Sun Sep 09 00:00:00 CDT 1990, sex='1', address='shanxi'}, MyUser{id=16, username='阿辉', birthday=Thu Sep 13 00:00:00 CDT 1990, sex='女', address='露露安'}, MyUser{id=17, username='zgf35310', birthday=Sun Sep 09 00:00:00 CDT 1990, sex='0', address='事实上'}, MyUser{id=19, username='zgf35310', birthday=Sun Sep 09 00:00:00 CDT 1990, sex='1', address='事实上'}]
Process finished with exit code 0
这就是一个简单的入门小案例。
重点:mybatis的Mapper代理模式:
什么是Mapper代理模式?
Mybatis作为dao层的传统开发模式(接口—实现类)
Mapper代理模式:开发人员在遵循mybatis提供的一些规范的前提下,mybatis帮我们自动生成dao接口的实现类。
规范:
1.映射文件中命名空间等于dao层接口的全路径
2.映射文件中sql语句的id是dao层接口里的方法名
3.映射文件中输入参数和输出参数的类型和dao层接口里的方法的参数和返回结果保持一致。
通过介绍我们对上述的入门案例进行修改:
1.创建一个Dao层的接口
public interface IUserDao {
List<MyUser> findAll();
}
2.修改映射配置文件中的命名空间
修改前:
<mapper namespace="s">
修改后
<mapper namespace="com.Dao.IUserDao">
3.修改修改映射配置文件中sql语句的id,与dao层接口的方法名一致
修改前
<select id="test1" resultType="com.domain.MyUser">
修改后
<select id="findAll" resultType="com.domain.MyUser">
//这里输出参数和返回值一致,不做修改,下节详细介绍输入和输出参数。
4.测试代码的修改
//加入两行代码
//4.创建dao层对象
IUserDao dao = sqlSession.getMapper(IUserDao.class);
//5.执行dao层方法
List<MyUser> all = dao.findAll();
这就是Mapper代理模式的简单入门案例。