我是靠谱客的博主 彪壮心锁,这篇文章主要介绍JavaEE_mybatis1. 创建 maven 工程补充设计模式分析查找所有分析代理对象分析问题扩展:新增用户 id 的返回值mybatis中的连接池Mybatis中的延迟加载Mybatis中的缓存++注解开发: day01_eesy_02mybatis + day04_eesy_03annotation_mybatis + day04_eesy_04annoOne2Many1.注解开发和xml配置********day01_eesy_02mybatis2.xml配置sql*******da,现在分享给大家,希望可以做个参考。

JavaEE框架_mybatis

  • 1. 创建 maven 工程
    • 2 添加 Mybatis3.4.5 的坐标
    • 3 编写 User 实体类
    • 4 编写持久层接口 IUserDao
    • 5 编写持久层接口的映射文件 IUserDao.xml
    • 6 编写 SqlMapConfig.xml 配置文件
    • 7 编写测试类
  • 补充
    • 1 在持久层接口中添加注解
    • 2 修改 SqlMapConfig.xml
    • 3 注意事项:
  • 设计模式分析
  • 查找所有分析
  • 代理对象分析
  • 问题扩展:新增用户 id 的返回值
    • dao实现类的执行过程
    • 代理dao的执行过程
    • 代理对象getMapper
    • 自定义mybatis开发流程图
  • mybatis中的连接池
  • Mybatis中的延迟加载
  • Mybatis中的缓存
  • ++注解开发: day01_eesy_02mybatis + day04_eesy_03annotation_mybatis + day04_eesy_04annoOne2Many
  • 1.注解开发和xml配置********day01_eesy_02mybatis
  • 2.xml配置sql*******day01_eesy_03mybatis_dao
  • 3.自定义的mybatis********day01_eesy_04mybatis_design
  • 4.CRUD功能xml和xml的sql********day02_eesy_01mybatis_CRUD
  • 5.dao实现类************day02_eesy_02mybatis_DAO
  • dao类************day03_eesy_01dynamicSQL
  • xml的sql配置********day03_eesy_02one2many
  • xml的sql配置**********day03_eesy_03many2many
  • 延迟加载*********day04_eesy_01lazy
  • 缓存**********day04_eesy_02cache
  • 注解开发************day04_eesy_03annotation_mybatis
  • 注解开发****************day04_eesy_04annoOne2Many

1. 创建 maven 工程

创建 mybatis01 的工程,工程信息如下:
Groupid:dcp.it
ArtifactId:mybatis01
Packing:jar

2 添加 Mybatis3.4.5 的坐标

在 pom.xml 文件中添加 Mybatis3.4.5 的坐标,如下:

复制代码
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
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies>

3 编写 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
/** * * <p>Title: User</p> * <p>Description: 用户的实体类</p> * <p>Company: http://www.itheima.com/ </p> */ 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 + "]"; } }

4 编写持久层接口 IUserDao

IUserDao 接口就是我们的持久层接口(也可以写成 UserDao 或者 UserMapper),具体代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/** * * <p>Title: IUserDao</p> * <p>Description: 用户的持久层操作</p> * <p>Company: http://www.itheima.com/ </p> */ public interface IUserDao { /** * 查询所有用户 * @return */ List<User> findAll(); }

5 编写持久层接口的映射文件 IUserDao.xml

要求:
创建位置:必须和持久层接口在相同的包中。
名称:必须以持久层接口名称命名文件名,扩展名是.xml
在这里插入图片描述

复制代码
1
2
3
4
5
6
7
8
9
10
<?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" resultType="com.itheima.domain.User"> select * from user </select>

6 编写 SqlMapConfig.xml 配置文件

复制代码
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
<?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> <!-- 配置 mybatis 的环境 --> <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/ee50"/> <property name="username" value="root"/> <property name="password" value="1234"/> </dataSource> </environment> </environments> <!-- 告知 mybatis 映射配置的位置 --> <mappers> <mapper resource="com/itheima/dao/IUserDao.xml"/> </mappers> </configuration>

7 编写测试类

复制代码
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
/** * * <p>Title: MybatisTest</p> * <p>Description: 测试 mybatis 的环境</p> * <p>Company: http://www.itheima.com/ </p> */ public class MybatisTest { public static void main(String[] args)throws Exception { //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建 SqlSessionFactory 的构建者对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //3.使用构建者创建工厂对象 SqlSessionFactory SqlSessionFactory factory = builder.build(in); //4.使用 SqlSessionFactory 生产 SqlSession 对象 SqlSession session = factory.openSession(); //5.使用 SqlSession 创建 dao 接口的代理对象 IUserDao userDao = session.getMapper(IUserDao.class); //6.使用代理对象执行查询所有方法 List<User> users = userDao.findAll(); for(User user : users) { System.out.println(user); } //7.释放资源 session.close(); in.close(); } }

补充

1 在持久层接口中添加注解

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/** * * <p>Title: IUserDao</p> * <p>Description: 用户的持久层操作</p> * <p>Company: http://www.itheima.com/ </p> */ public interface IUserDao { /** * 查询所有用户 * @return */ @Select("select * from user") List<User> findAll(); }

2 修改 SqlMapConfig.xml

复制代码
1
2
3
4
<!-- 告知 mybatis 映射配置的位置 --> <mappers> <mapper class="com.itheima.dao.IUserDao"/> </mappers>

3 注意事项:

在使用基于注解的 Mybatis 配置时,请移除 xml 的映射配置(IUserDao.xml)。
补充

设计模式分析

在这里插入图片描述
在这里插入图片描述

查找所有分析

在这里插入图片描述

代理对象分析

在这里插入图片描述

问题扩展:新增用户 id 的返回值

新增用户后,同时还要返回当前新增用户的 id 值,因为 id 是由数据库的自动增长来实现的,所以就相
当于我们要在新增后将自动增长 auto_increment 的值返回。

复制代码
1
2
3
4
5
6
7
8
9
<insert id="saveUser" parameterType="USER"> <!-- 配置保存时获取插入的 id --> <selectKey keyColumn="id" keyProperty="id" resultType="int"> select last_insert_id(); </selectKey> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>

dao实现类的执行过程

在这里插入图片描述

代理dao的执行过程

在这里插入图片描述

代理对象getMapper

在这里插入图片描述

自定义mybatis开发流程图

在这里插入图片描述

mybatis中的连接池

复制代码
1
2
3
4
5
6
7
8
9
10
mybatis连接池提供了3种方式的配置: 配置的位置: 主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。 type属性的取值: POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现 UNPOOLED 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。 JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。 注意:如果不是web或者maven的war工程,是不能使用的。 我们课程中使用的是tomcat服务器,采用连接池就是dbcp连接池。

Mybatis中的延迟加载

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
问题:在一对多中,当我们有一个用户,它有100个账户。 在查询用户的时候,要不要把关联的账户查出来? 在查询账户的时候,要不要把关联的用户查出来? 在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的。 在查询账户时,账户的所属用户信息应该是随着账户查询时一起查询出来。 什么是延迟加载 在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载) 什么是立即加载 不管用不用,只要一调用方法,马上发起查询。 在对应的四种表关系中:一对多,多对一,一对一,多对多 一对多,多对多:通常情况下我们都是采用延迟加载。 多对一,一对一:通常情况下我们都是采用立即加载。

Mybatis中的缓存

复制代码
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
什么是缓存 存在于内存中的临时数据。 为什么使用缓存 减少和数据库的交互次数,提高执行效率。 什么样的数据能使用缓存,什么样的数据不能使用 适用于缓存: 经常查询并且不经常改变的。 数据的正确与否对最终结果影响不大的。 不适用于缓存: 经常改变的数据 数据的正确与否对最终结果影响很大的。 例如:商品的库存,银行的汇率,股市的牌价。 Mybatis中的一级缓存和二级缓存 一级缓存: 它指的是Mybatis中SqlSession对象的缓存。 当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。 该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中 查询是否有,有的话直接拿出来用。 当SqlSession对象消失时,mybatis的一级缓存也就消失了。 二级缓存: 存得是数据,不是对象,从二级缓存拿数据,写新的对象 它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。 二级缓存的使用步骤: 第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置) 第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置) 第三步:让当前的操作支持二级缓存(在select标签中配置)

++注解开发: day01_eesy_02mybatis + day04_eesy_03annotation_mybatis + day04_eesy_04annoOne2Many

1.注解开发和xml配置********day01_eesy_02mybatis

2.xml配置sql*******day01_eesy_03mybatis_dao

dao实现类
使用xml配置sql

复制代码
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="dcp.it.dao.IUserDao"> <!-- 配置查询所有--> <select id="findAll" resultType="dcp.it.domain.User"> select * from user; </select> </mapper>

3.自定义的mybatis********day01_eesy_04mybatis_design

4.CRUD功能xml和xml的sql********day02_eesy_01mybatis_CRUD

5.dao实现类************day02_eesy_02mybatis_DAO

1.dao实现类的使用
2.测试类的初始化设置不同
3.自动提交事务给openSession(true)设置为true

dao类************day03_eesy_01dynamicSQL

IUserDao.xml:
1.if,foreach标签的使用:用来连接条件的
2.sql标签:抽取重复的sql语句
SqlMapConfig.xml:
1.domain的别名:typeAliases标签
2.properties资源路径
根据条件查询:QueryVo配置类
1.各种查询方法

xml的sql配置********day03_eesy_02one2many

1对多的IUserDao.xml配置
1对1的IAccountDao.xml配置

xml的sql配置**********day03_eesy_03many2many

多对多,2个xml配置文件

延迟加载*********day04_eesy_01lazy

复制代码
1
2
3
4
5
6
<settings> <!--开启Mybatis支持延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> <setting name="aggressiveLazyLoading" value="false"></setting> </settings>

1.一对一:IAccountDao.xml配置
2.一对多:IUserDao.xml配置

缓存**********day04_eesy_02cache

1.test中
UserTest:一级缓存
SecondLevelCacheTest:二级缓存
2.需要开启缓存:SqlMapConfig.xml;改IUserDao.xml配置
3.二级缓存是二级缓存区取出数据,封装成新的对象,所以对象不一样

注解开发************day04_eesy_03annotation_mybatis

IUserDao.java接口:注解@Results和@ResultMap的写法:数据库里数据名称不一致的注解

注解开发****************day04_eesy_04annoOne2Many

复制代码
1
2
3
IAccountDao.java接口:一对一注解@Results中@Result的@one IUserDao.java接口:一对多注解@Results中@Result的@many

开启二级缓存
SqlMapConfig.xml配置
IUserDao.java接口:@CacheNamespace设置为true:@CacheNamespace(blocking = true)

最后

以上就是彪壮心锁最近收集整理的关于JavaEE_mybatis1. 创建 maven 工程补充设计模式分析查找所有分析代理对象分析问题扩展:新增用户 id 的返回值mybatis中的连接池Mybatis中的延迟加载Mybatis中的缓存++注解开发: day01_eesy_02mybatis + day04_eesy_03annotation_mybatis + day04_eesy_04annoOne2Many1.注解开发和xml配置********day01_eesy_02mybatis2.xml配置sql*******da的全部内容,更多相关JavaEE_mybatis1.内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

相关文章

评论列表共有 0 条评论

立即
投稿
返回
顶部