mybatis的使用
1.ORM
object Relational Mapping : 对象关系映射
简单地说,就是把数据库表和实体类及实体类的属性对应起来,让我们可以通过操作实体类来操作数据库表。
mybatis的配置
1.全局配置文件mybatis-config.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> <!-- 引入外部资源文件--> <properties> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="fuck"/> </properties> <!-- 配置数据源环境 --> <environments default="development"> <environment id="development"> <!-- 数据库事务管理类型 --> <transactionManager type="JDBC"/> <!-- 数据源,type=pooled 说明是使用连接池方式,可以节省资源 --> <dataSource type="POOLED"> <!-- 调用资源文件里的用户信息--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper class="com.dao.UserMapper"/> </mappers> </configuration>
2.配置mapper文件
<?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.dao.UserMapper"> <!-- 配置查询所有用户 --> <select id="listAllUsers" resultType="com.bean.User"> SELECT * FROM user </select> </mapper>
namespace:对应类的全路径名
id:类的方法
resultType:方法的返回值
(mapper文件必须和对应类在同一目录下才可以)
当使用模糊查询时,要在传入的参数里添加%.
<insert id="save" parameterType="com.bean.User"> INSERT INTO USER VALUES(#{username},#{age}) </insert>
mybatis使用ognl表达式来赋值.#{name},#{age}相当于user.getUserName和user.getAge
表的字段和javaBean属性名字不同时的解决办法
1.配置查询结果和实体类的属性相对应的关系
<resultMap id="map" type="com.bean.Student"> <id property="s_id" column="id"></id> <result property="s_name" column="name"></result> <result property="s_age" column="age"></result> <result property="s_grade" column="grade"></result> </resultMap>
配置Properties文件
把配置文件放在resources包下
<properties resource="config.properties"> </properties>
引用时${},名字必须和配置文件的相同
使用typeAliases配置别名
<typeAliases> <package name="com.bean"></package> </typeAliases>
配置别名之后,再使用resultType和paramterType就可以直接写类名,不需要在写全类名了
<mappers> <package name="com.dao"></package> </mappers>
使用package属性把所有的mapper文件都导入进来,不需要一个用mapper标签来导入.
mabatis的事务配置
SqlSession sqlSession = factory.openSession(true);
当设置为true时,mybatis会自动提交事务,就不需要在手动提交事务了
mybatis动态sql的使用
<select id="findByCondition" resultType="user"> SELECT * FROM user where 1 = 1 <if test="username!=null"> and username = #{username} </if> </select>
SELECT * FROM user <where> <foreach collection="list" item="item" open="age in (" close=")" separator=","> #{item} </foreach> </where>
当传入的参数是集合类型时,可以用forEach标签来遍历值.
当有一对多的情况时
<resultMap id="myper" type="person"> <id property="id" column="id"></id> <result property="username" column="username" ></result> <result property="age" column="age"></result> <collection property="account" ofType="account"> <id property="id" column="aid"></id> <result property="uid" column="uid"></result> <result property="money" column="money"></result> </collection> </resultMap>
Mybatis中的缓存
1.一级缓存
作用于SqlSession对象中,当进行一次查询时,sqlsession会将sql语句作为key,返回结果作为value存储在map中,当有相同的查询时,直接有map中拿出结果.
2.二级缓存
它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存
对象存储的是数据,不是对象
二级缓存的使用步骤:
1.让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
2.让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
3.让当前的操作支持二级缓存(在select标签中配置)