mybatis-config.xml <!-- 引入外部配置文件--> <properties resource="db.properties" />
//日志 <settings> <setting name="logImpl" value="LOG4J"/> </settings>
<typeAliases> <!-- 别名,实体类少的时候--> <!-- <typeAlias type="Entity.User" alias="user"/>--> <!-- 扫包,实体类多的时候--> <package name="Entity"/> </typeAliases>
<!--数据库连接信息配置--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--> <!-- <property name="url" value="jdbc:mysql://localhost:3306/program?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>--> <!-- <property name="username" value="root"/>--> <!-- <property name="password" value="root"/>--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment>
<!-- 每个Mapper.xml都要注册--> <mappers> <mapper resource="UserMapper.xml" /> <!-- 配置文件必须在同个包下--> <!-- <mapper class="Dao.UserMapper" />--> <!-- <package name="Dao"/>--> </mappers>
Mapper.xml
//select查询,delete删除,update修改,insert新增
//id保持与Dao层方法名一致,parameterType参数类型="实体类路径/map",resultMap="UserMap"引用<resultMap>标签的id,适合复杂的实体关系
<select id="getUserLimit" parameterType="map" resultType="user"> select id,name,pwd from program.user limit #{startIndex},#{pageSize} </select>
<resultMap id="UserMap" type="user" > <!-- column数据库,property实体类--> <result column="id" property="id" /> <result column="name" property="name" /> <result column="pwd" property="password" /> <!-- <association property="role" column="rid" javaType="role" select="getRole" />--> <association property="role" javaType="role" >//association类,collection集合 <result column="role_name" property="role_name" /> </association> </resultMap>
测试:
private static SqlSessionFactory sqlSessionFactory; InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//读取配置文件 sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); sqlSessionFactory.openSession(true);//自动提交事务
支持在方法直接用@select/insert/delete/update("sql")
MyBatis运行原理:
1.Resources获取加载全局配置文件
2.实例化SqlSessionFactoryBuilder构造器
3.解析XMLConfigBuilder文件
4.返回configuration对象,所有配置文件信息
5.SqlSessionFactory实例化
6.transaction事务管理
7.executor执行
8.CRUD实现
9.判断是否成功,不成功跳到第6
支持注解 dao层方法@Select/@delete/@Updata/@Insert 参数@Param替代xml的parameterType
动态sql,就是拼接sql
1.标签<where>若后面没有参数则去掉where存在即添加,
2.<if>存在则添加sql,
3.<choose>会自动判断是否去掉and,
4.<when><otherwise>如同switch
5.<foreach collection="ids"//集合名 item="id"//遍历个体 open=" id in (" //开始 close=")"//结束 separator=","//,隔开>#{id} </foreach>
得到的 id in( ids[0] , ids[1] , ... )
Mybatis缓存分为一级缓存和二级缓存,一级默认开启
一级缓存主要作用域就SqlSession就一个方法会话关闭则清空缓存,二级缓存作用域就Mapper.xml就一个Mapper文件
缓存在增删改都会被清空,出发在xml的方法id添加flushCache=false
查缓存,主要是修改少用的少的页面
其工作顺序是先查二级缓存再查一级缓存没有在查数据库