Mybatis学习之路-Day3
1、连接池
2、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连接池
3、mybatis中的事务
什么是事务、事务的四大特性ACID、不考虑隔离性会产生的3个问题、解决办法:四种隔离级别
sqlSession = factory.openSession(true); //使用此方法可以自动提交,但是不安全
sqlSession.commit();
4、动态sql语句
IUserDao接口
/**
* 根据传入参数条件
* @param user 查询条件可能有用户名可能有性别也可能什么都没用
* @return
*/
List<User> findUserByCondition(User user);
/**
* 根据queryvo中提供的id集合查询信息
*
* @param vo
* @return
*/
List<User> findUserInIds(QueryVo vo);
IUserDao.xml
<select id="findUserByCondition" resultType="com.KingNiu.domain.User">
select * from user where 1=1
<if test="username != null">
and username = #{username}
</if>
</select>
<select id="findUserByCondition" resultType="com.KingNiu.domain.User">
select * from user
<where>
<if test="username != null">
and username = #{username}
</if>
<if test="sex != null">
and sex = #{sex}
</if>
</where>
</select>
<select id="findUserInIds" resultType="com.KingNiu.domain.User" parameterType="com.KingNiu.domain.QueryVo">
select * from user
<where>
<if test="ids != null and ids.size()>0">
<foreach collection="ids" open="and id in(" close=")" item="iud" separator=",">
#{iud}
</foreach>
</if>
</where>
</select>
@Test
public void testFindByCondition() {
User u = new User();
u.setUsername("老王");
u.setSex("女");
List<User> users = userDao.findUserByCondition(u);
for (User user : users) {
System.out.println(user);
}
}
@Test
public void testFindInIds() {
QueryVo vo = new QueryVo();
List<Integer> list = new ArrayList<>();
list.add(41);
list.add(42);
list.add(46);
vo.setIds(list);
List<User> users = userDao.findUserInIds(vo);
for (User user : users) {
System.out.println(user);
}
}
5、mybatis中的多表查询
表之间的关系:一对一 一对多 多对一 多对多
mybatis中的多表查询:
示例:用户和账户
一个用户可以有多个账户
一个账户只属于一个用户(多个账户也可以属于同一个用户)
步骤:
1、建立两张表:用户表、账户表
让用户表和账户表具备一对多的关系:需要使用外键在账户表中添加
2、建立两个实体类:用户实体类和账户实体类
让账户和用户的实体类能体现出一对多的关系
3、建立两个配置文件:
用户的配置文件
账户的配置文件
4、实现配置:
当我们查询用户时,可以同时得到用户下所包含的账户信息
当我们查询账户时,可以同时得到账户额所属用户信息
示例:用户和角色
用户可以有多个角色
角色可以被多个用户拥有
步骤:
1、建立两张表:用户表、角色表
让用户表和角色表具备多对多的关系:需要使用中间表,中间表中包含各自的主键,在中间表中是外键
2、建立两个实体类:用户实体类和角色实体类
让角色和用户的实体类能体现出多对多的关系
各自包含一个对方集合引用
3、建立两个配置文件:
用户的配置文件
角色的配置文件
4、实现配置:
当我们查询用户时,可以同时得到用户下所包含的角色信息
当我们查询角色时,可以同时得到角色的所属用户信息