Mybatis学习之路-Day3

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、实现配置:
​ 当我们查询用户时,可以同时得到用户下所包含的角色信息
​ 当我们查询角色时,可以同时得到角色的所属用户信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值