黑马程序员技术交流社区

标题: mybatis 笔记 [打印本页]

作者: aaa386376407    时间: 2019-1-24 22:56
标题: mybatis 笔记
连接池
解决高并发
当拿出后 顺序发生改变
重新排序
归还后 去末尾

容器就是一个集合对象 线程安全 一对一 先进先出

mybatis中的连接池
3种方式配置:
sqlmapconfig.xml 中 datasource标签,type 表示何种连接池方式
type
pooled     获取 - 用 - 还   
空闲池 if true,get one;
if false,go 活动池
活动池 check if max,
use oldest;

unpooled 创 - 用

jndi (了解)  服务器提供的jndi技术获取datasource,不同的服务器所拿到的datasource不一样, only web/maven-war        

mybatis中的事务
通过sqlseesion的
commit方法和roolback方法
opensession(true)自动提交

多个参数 用map来封装
Map map = new Map
map.put(id,1)
map.put(...)
getMapper(map);

xml中与之前相同

select * from user where 1=1//可以省略and<if test="userName!=null">    username = #{username}</if>


select * from user//不可以省略and<where><if test="userName!=null">    username = #{username}</if></where>

select * from user//不可以省略and<where><if test="userName!=null">    username = #{username}</if><if test="userSex!=null">    usersex = #{usersex}</if></where>

select * from user<where><if test="ids!=null and ids.size()>0">                集合          开始部分                   每个元素   用?分隔    <foreach collection="ids" open="and id in("close") item="id" separator=",">        #{id}//与item对应    </foreach></if></where>
抽取重复sql语句:<sql id="defaultUser">
<include refiled = "defalutuser">

mybatis的多表查询
一对多
一对一
多对多

one user have many bankcrad
one bankcard only belong one user

user
bankcard  外键

用户配置文件 账户配置文件

<resultType>    |    类            集合<association>/<collection>

user ->computers


关于一对多需要注意的事项

SqlMapConfig.xml中需要多添加typeAliases标签!!!
<typeAliases>
    <package name="com.itheima.domain"/>
</typeAliases>



domain中 User和Computer 都需要写对方的List成员变量!!!
private List<Computer> computers;
private List<User> users;



UserDao.xml中 需要添加resultMap标签!!!若关联对象是集合用collection,类用association
column中的值不能重复

<resultMap id="u_c" type="user">
    <id property="id" column="id"></id>
    <result property="name" column="name"></result>
        <collection property="computers" column="id" ofType="computer">
            <id property="id" column="cid"></id>
            <result property="name" column="cname"></result>
            <result property="uid" column="uid"></result>
        </collection>
</resultMap>


resultMap与上面对应
<select id="findAll"  resultMap="u_c">
    select u.*,c.id cid ,c.name cname, c.uid from user u,computer c where u.id = c.uid
</select>



关于多对多需要注意的事项

需要创建第三张表!
D:/youdao/weixinobU7VjuozRmRZ-Yc6_UjnKavZoP0/7e6b053026b4404f9a61084d63468d1b/clipboard.png

注意标签中的重命名
<mapper namespace="com.itheima.dao.TeacherDao">

    <resultMap id="t_s" type="teacher">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <collection property="students" column="id" ofType="student">
            <id property="id" column="s_id"></id>
            <result property="name" column="s_name"></result>
        </collection>
    </resultMap>

    <select id="findAll"  resultMap="t_s">
      select t.* , s.id s_id , s.name s_name from teacher t , student s , teacher_student
       where t.id = teacher_student.tid
       and s.id = teacher_student.sid
    </select>
</mapper>



JNDI数据源
目的:模仿windows中的注册表
map结构

通过配置-服务器-数据库







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2