概述
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 的坐标,如下:
<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 实体类
/**
*
* <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),具体代码如下:
/**
*
* <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
<?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 配置文件
<?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 编写测试类
/**
*
* <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 在持久层接口中添加注解
/**
*
* <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
<!-- 告知 mybatis 映射配置的位置 -->
<mappers> <mapper class="com.itheima.dao.IUserDao"/>
</mappers>
3 注意事项:
在使用基于注解的 Mybatis 配置时,请移除 xml 的映射配置(IUserDao.xml)。
补充
设计模式分析
查找所有分析
代理对象分析
问题扩展:新增用户 id 的返回值
新增用户后,同时还要返回当前新增用户的 id 值,因为 id 是由数据库的自动增长来实现的,所以就相
当于我们要在新增后将自动增长 auto_increment 的值返回。
<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中的连接池
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中的延迟加载
问题:在一对多中,当我们有一个用户,它有100个账户。
在查询用户的时候,要不要把关联的账户查出来?
在查询账户的时候,要不要把关联的用户查出来?
在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的。
在查询账户时,账户的所属用户信息应该是随着账户查询时一起查询出来。
什么是延迟加载
在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
什么是立即加载
不管用不用,只要一调用方法,马上发起查询。
在对应的四种表关系中:一对多,多对一,一对一,多对多
一对多,多对多:通常情况下我们都是采用延迟加载。
多对一,一对一:通常情况下我们都是采用立即加载。
Mybatis中的缓存
什么是缓存
存在于内存中的临时数据。
为什么使用缓存
减少和数据库的交互次数,提高执行效率。
什么样的数据能使用缓存,什么样的数据不能使用
适用于缓存:
经常查询并且不经常改变的。
数据的正确与否对最终结果影响不大的。
不适用于缓存:
经常改变的数据
数据的正确与否对最终结果影响很大的。
例如:商品的库存,银行的汇率,股市的牌价。
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
<?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
<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
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. 创建 maven 工程补充设计模式分析查找所有分析代理对象分析问题扩展:新增用户 id 的返回值mybatis中的连接池Mybatis中的延迟加载Mybatis中的缓存++注解开发: day01_eesy_02mybatis + day04_eesy_03annotation_mybatis + day04_eesy_04annoOne2Many1.注解开发和xml配置********day01_eesy_02mybatis2.xml配置sql*******da所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复