MyBatis核心配置
1.SqlSessionFactory
Reader reader =
Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
通常每个数据库对应一个SqlSessionFactory,建议使用单例
2.SqlSession
每一个线程都应该有自己的SqlSession实例,使用后及时关闭
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
//持久化操作
}finally{
sqlSession.close();
}
3.配置文件
<mapper>元素为根元素
-
<properties>元素
-
建立db.properties文件
<properties resource="db.proerties" />
<dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource>
-
使用property子元素
<property name="" value="" />
-
<settings>用来改变MaBatis运行时的行为,开启二级缓存,延迟等
<!--设置--> <settings> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="true" /> ... </settings>
-
<typeAliases>用来给配置文件中Java类型设置别名
<typeAliases> <typeAlias alias="user" type="完整包名.User"/> </typeAliases>
如果省略Alias则默认类名首字母小写为别名
也可以使用自动扫描的方式把整个包下的类起别名
<typeAliases> <package name="需要扫描的包"/> </typeAliases>
还可以采用注解方式(优先级高)
@Alias(value="user") public class User{ //.... }
-
<typeHandle>类型处理器 用于完成 javaType到 jdbcType的转换
略
-
<objectFactory> 对象工厂用于创建结果对象实例 一般不用修改
-
<plugins> 插件
-
<environments>元素 用于配置数据源
<environments default="mysql"> <environment id="mysql"> <!--使用JDBC事务管理--> <transactionManager type="JDBC"/> <!--数据库连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>
- default属性:用于指定默认数据源ID
- transactionManager子元素:配置事务管理器,一般使用Spring自带管理器
- 数据源类型:UNPOOLED、POOLED、JNDI
-
<mappers>元素 用于指定映射文件的位置
-
类路径引入
<mappers> <mapper resource="com/itheima/mapper/CustomerMapper.xml"/> </mappers>
-
接口类引入
<mappers> <mapper class="完整包名.接口名"/> </mappers>
-
包名引入
<mappers> <mapper name="完整包名"/> </mappers>
-
4.映射文件
<mapper>元素为根元素
-
<select>元素 用于映射查询语句
<select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer"> select * from t_customer where id = #{id} </select>
下面列举常用属性:
属性 说明 id 元素唯一标识符 parameterType 传入参数类型 resultType 返回值类型/集合包含类型 resultMap resultMap的id引用 flushCache 查询前是否清理缓存 useCache 是否开启二级缓存 fetchSize 获取记录总条数 resultSetType 结果集类型
-
<insert>元素 用于映射插入语句
<insert id="addCustomer" parameterType="com.itheima.po.Customer" keyProperty="id" useGeneratedKeys="true"> insert into t_customer(username,jobs,phone) values (#{username},#{jobs},#{phone}) </insert>
列举三个特有属性:
属性 说明 keyProperty 将插入或更新时的返回值赋给(输入对象的)某个属性,通常设置为主键对应属性 keyColumn 用于设置第几列是主键,当不是第一列时需要设置 useGeneratedKeys 用于获取数据库内部产生的主键,如自动增长字段 SqlSession sqlSession = MybatisUtils.getSession(); Customer customer = new Customer(); customer.setUsername("rose"); customer.setJobs("student"); customer.setPhone("13333533092"); int rows = sqlSession.insert("com.itheima.mapper" +".CustomerMapper.addCustomer",customer); //输出插入数据的主键id System.out.println(customer.getId()); if(rows>0){ System.out.println("插入了"+rows+"条数据"); }else{ System.out.println("插入失败"); } sqlSession.commit(); sqlSession.close();
-
<update>和<delete>元素 比较简单略过
-
<sql>元素用于抽出SQL语句中相同的部分
<mapper namespace="com.itheima.mapper.CustomerMapper"> <!--抽出重复代码--> <sql id="customerColumns">id,username,jobs,phone</sql> <!--通过id查询用户--> <select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer"> select <include refid="customerColumns"/> from t_customer where id = #{id} </select> </mapper>
-
<resultMap>元素 用于定义映射规则、级联的更新、类型转化器等。
<mapper namespace="com.itheima.mapper.UserMapper"> <!--type 返回的类型--> <resultMap id="resultMap" type="com.itheima.po.User"> <!--主键 column为表中列名--> <id property="id" column="t_id"/> <!--普通属性--> <result property="name" column="t_name"/> <result property="age" column="t_age"/> </resultMap> <select id="findAllUser" resultMap="resultMap"> select * from t_user </select> </mapper>
<association>和<collection>子元素可以实现关联在后面讨论