Mybatis(idea+maven)

框架概念

使用框架前后对比

之前的MVC结构与框架对比:

持久层(Dao)技术解决方案

1. JDBC技术:
           Connection        获取连接
        PreparedStatement   提前处理sql语句
            ResultSet       处理sql语句获得结果

2. Spring的JdbcTemplate(工具类):
        Spring对jdbc的简单封装

3. Apache的DBUtils(工具类):
        和Spring的JdbcTemplate很像,也是简单封装

4. 数据池:
    彻底死掉的C3P0(ssh里面的h框架的内置数据池)
    咸鱼翻身的DBCP
    功能全面的Druid(阿里云)
    性能无敌的HikariCP

Mybatis框架概述

内部封装了jdbc,使开发者只需要关注sql语句本身,而不用花费精力去处理加载驱动、创建连接等工作。

通过xml或者注解的方式将执行的各种statement配置起来,并且通过java对象和statement中的sql动态参数进行映射生成最终的sql语句,最后由框架执行sql语句并且将结果映射给java对象并且返回。

通过ORM思想(Object Relational Mappging 对象关系映射)解决了实体和数据库映射的问题,对jdbc的api底层访问细节,使我们不用于jdbc的api打交道,就可以完成数据库的持久化操作


Mybatis环境搭建

前期环境准备

1.新建数据库

1
2
3
4
5
6
7
8
9
10
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');

2.通过无骨架的创建方式创建maven工程

3.通过pom.xml文件去添加mybatis和mysql的jar包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.itheima</groupId>
<artifactId>day01_easy_01mybatis</artifactId>
<version>1.0-SNAPSHOT</version>

<packaging>jar</packaging> <!--通过jar包-->

<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId> <!--通过Mybatis官网找到的框架 只需要更改版本号-->
<version>3.4.5</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <!--需要mysql-->
<version>5.1.6</version>
</dependency>

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId> <!--日志文件-->
<version>1.2.12</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId> <!--单元测试-->
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>

</project>

书写代码框架

1.main/java里书写domain和dao层代码

dao层IUserDao类:

1
2
3
public interface IUserDao {
List<User> findAll(); //接口写查询所有的方法
}

domain层的User类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class User implements Serializable {
//和数据库保持一致
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public Date getBirthday() {
return birthday;
}

public void setBirthday(Date birthday) {
this.birthday = birthday;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}

2.创建Mybatis的主配置文件 sqlMapConfigxml(需要导入外部的约束(就是前面的四行))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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">

<!--Mybatis的主配置文件-->
<configuration>
<!--配置环境 default和id必须一致-->
<environments default="mysql">
<!--配置mysql环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--连接数据库的四个基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
<property name="username" value="root"/>
<property name="password" value="njdxrjgc7777777."/>
</dataSource>
</environment>
</environments>

<!--指定映射配置文件的位置 映射配置文件指的是每个dao独立的配置文件-->
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>

</configuration>

3.创建映射配置文件 IUserDao.xml((需要导入外部的约束(就是前面的四行))

1
2
3
4
5
6
7
8
9
10
11

<?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="com.itheima.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll">
select * from user;
</select>
</mapper>

Mybatis的xml配置开发

拷贝日志文件(log4j.properties)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

书写Test类

在src/test/java里面写Test类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class MybatisTest {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml"); //读取我们的mybatis主配置文件

//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in); //构建流(怎么解析我们不用管)

//3.使用工厂生产SqlSession对象
SqlSession session=factory.openSession();

//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao=session.getMapper(IUserDao.class); //没有实现类 我们用代理对象去做

//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user:users)
{
System.out.println(user);
}

//6.释放资源
session.close();
in.close();
}
}

更改IUserDao.xml映射文件(增加结果封装到哪里)

1
2
3
<select id="findAll" resultType="com.itheima.domain.User">   <!--我们要把结果封装到User才可以-->
select * from user;
</select>

测试执行

1.最终的入门程序格式:

2.代码执行结果:


xml开发方式中设计模式分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//1.读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml"); //读取我们的mybatis主配置文件

//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in); //构建者模式

//3.使用工厂生产SqlSession对象
SqlSession session=factory.openSession(); //工厂模式

//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao=session.getMapper(IUserDao.class); //没有实现类 我们用代理对象去做

//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user:users)
{
System.out.println(user);
}

//6.释放资源
session.close();
in.close();

每一步的解析:


Mybatis注解开发

准备之前的所有东西

1.将pom导入的jar文件写在新的项目的pom.xml里面

2.将上面用xml配置方式的src/java和resource以及test测试类全部拷贝进新项目

进行xml更改为注解方式

3.删除之前的IUserDao.xml的配置方式(里面写的是查询语句和最后返回给User封装)

4.在IUserDao的接口里面使用Select注解(把之前的xml方式的东西挪到里面)

1
2
3
4
public interface IUserDao {
@Select("select * from user")
List<User> findAll();
}

5.那么要删除SqlMapConfig.xml的Mybatis主配置(之前是链接xml的位置 现在是直接找到类名)

1
2
3
4
5
<!--指定映射配置文件的位置 映射配置文件指的是每个dao独立的配置文件-->
<!--如果使用注解来配置文件,此处应该用class属性指定被注解的dao全限定类名-->
<mappers>
<mapper class="com.itheima.dao.IUserDao"/>
</mappers>

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 框架概念
    1. 1.1. 使用框架前后对比
    2. 1.2. 持久层(Dao)技术解决方案
  2. 2. Mybatis框架概述
  3. 3. Mybatis环境搭建
    1. 3.1. 前期环境准备
    2. 3.2. 书写代码框架
  4. 4. Mybatis的xml配置开发
    1. 4.1. 拷贝日志文件(log4j.properties)
    2. 4.2. 书写Test类
    3. 4.3. 更改IUserDao.xml映射文件(增加结果封装到哪里)
    4. 4.4. 测试执行
  5. 5. xml开发方式中设计模式分析
  6. 6. Mybatis注解开发
    1. 6.1. 准备之前的所有东西
    2. 6.2. 进行xml更改为注解方式
,