Mybatis框架配置详解

<?xml version="1.0" encoding="UTF-8"?>
<!--验证XML文件编写的合法性,也就是一个约束,要求只能按DTD定义的格式写,配置后会出新提示 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<!-- 开启日志 -->
		<setting name="logImpl" value="LOG4J " />
	</settings>
	<typeAliases>
		<!-- 给包下的所有类起别名,不区分大小写,把包中的类型全小写 -->
		<package name="com.test.pojo" />
	</typeAliases>
	<!-- 声明当前使用的环境 -->
	<environments default="default">
		<!-- 声明可以使用的环境 -->
		<environment id="default">
			<!-- 使用jdbc原生态事务进行管理 可取MANAGED 把事务管理转交给其他容器.原生 JDBC 事务 setAutoMapping(false); -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 使用数据库连接池 可取UNPOOLED 不实用数据库连接池,和直接使用 JDBC一样 JNDI :java 命名目录接口技术,使用自定义的数据库连接池技术 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/user? serverTimezone=GMT" />
				<property name="username" value="root" />
				<property name="password" value="admin123" />
			</dataSource>
		</environment>
	</environments>
	<!-- 告诉mybatis去哪里找映射文件 在使用接口绑定方案时需使用package标签, 定义接口 接口包名和接口名与 mapper.xml 
		中<mapper>namespace相同 接口中方法名和 mapper.xml 标签的 id 属性相同 -->
	<mappers>
		<mapper resource="com/test/mapper/StudentMapper.xml" />
		<package name="com.test.mapper" />
	</mappers>
</configuration>

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">
<!-- namespace的命名相当于包名加类名 -->
<mapper namespace="com.test.mapper.Student">
	<!-- id相当于方法名 resultType返回值类型 -->
	<select id="selAll" resultType="student">
		select t.id `teacher.id`,t.name `teacher.name`,s.id id,s.name name,age,tid from student s LEFT JOIN teacher t on t.id=s.tid
	</select>
	<!--parameterType 传入的参数类型 #{0}使用索引,从 0 开始 #{0}表示第一个参数 也可以使用#{param1}第一个参数 
		如果只有一个参数(基本数据类型或 String)时#{内容}中的内容可以任意写 如果参数是对象#{属性名} 如果参数是 map 写成#{key} 
		在使用${内容}会去找对应的get和set方法 如果写数字,就是一个数字 使用#和$的区别就是 #{} 获取参数的内容支持 索引获取,param1 
		获取指定位置参数, 并且 SQL 使用?占位符 ${} 字符串拼接不使用?,默认找${内容}内容的 get/set 方法,如 果写数字,就是一个数字 -->
	<select id="selStudent" resultType="student" parameterType="int">
		select * from student where id = #{0}
	</select>
	<!-- 在使用接口绑定方案时,需要传多个参数时可以不写parameterType -->
	<select id="selStudent" resultType="student">
		select * from student where name = #{name} and age=#{age}
	</select>
	<!-- 动态sql -->
	<!-- <if> 在mapper.xml 中添加逻辑判断
	 <where>如果<where>中有内容会生成 where 关键字 并且去掉第一个and,如果没有内容不 生成 where 关键字
	 <choose> <when> <otherwise>只有有一个成立,其他都不执行.相当于java中的switch语句
	 <set>如果<set>里面有内容生成 set 关键字,去掉最后一个逗号,没有就不生成(在使用时注意sql语法错误)
	 <Trim> prefix 在前面添加内容 prefixOverrides 去掉前面内容 suffix 在后面添加内容 suffixOverrieds 去掉后面内容
	 <bind> 动态绑定 在原内容前或后添加内容  <bind name="namekey" value="'%'+namekey+'%'"/>
	 <foreach> collectino="" 要遍历的集合  item 迭代变量, #{迭代变量名}获取内容 open 循环后左侧添加的内容 close 循环后右侧添加的内容
	 separator 每次循环时,元素之间的分隔符 (适用场景:in 查询中.批量新增中(mybatis 中 foreach 效率比较
		低,在使用时 openSession(ExecutorType.BATCH)必须指定,底层 JDBC 的 PreparedStatement.addBatch();
	 <sql> 和<include> 如果希望复用sql片段,可以使用<sql>定义这个片段
	 在<select>或<delete>或<update>或<insert>中使用<include>引用 
	  -->
	  <!-- mybatis一级缓存 -->
	  <!-- mybatis 默认开启一级缓存就是sqlsession,同一个 SqlSession 对象调用同一个<select>时,只有第一次访问
	数据库,第一次之后把查询结果缓存到 SqlSession 缓存区(内存)中,在执行查询时先去缓存区中找,找不到在去数据库中进行查找,
	作用域是同一个sqlsession对象
	  -->
	  <!-- mybatis二级缓存 -->
	  <!-- mybatis的二级缓存就是 SqlSessionFactory 有效范围:同一个 factory 内哪个 SqlSession 都可以获取
	  (在使用时需注意 当数据频繁被使用,很少被修改,经常修改可以会造成脏读)
	在使用二级缓存中需要在mapper文件中配置<cache readOnly="true"></cache>
	  如果不写 readOnly=”true”需要把实体类序列化
	  当 SqlSession 对象 close()时或 commit()时会把 SqlSession 缓存的数据刷新到 SqlSessionFactory 缓存区中
	  -->
	  
	  
	  <!-- 在mybatis中的atuomapping特性中 属性名和类名一致时可以不用配,需注意mybatis 默认只会给列
		专配一次
		<association/>只要专配一个对象就用这个标签
		property: 对象在类中的属性名
		select:通过哪个查询查询出这个对象的信息
		column: 把当前表的哪个列的值做为参数传递给另一个查询
		collection 多个对象时使用  
		-->
	  <resultMap type="student" id="stuMap">
	 	 <id property="tid" column="tid"/>
	  <association property="teacher"
		select="com.test.mapper.Student.selStudent"
		column="tid"></association>
	  </resultMap>
	  <select id="selStudent" resultMap="stuMap">
		select * from student
	  </select>
		
	  <select id="selStudent" resultType="teacher" parameterType="int">
		select * from teacher where id=#{id}
	  </select>
	  
</mapper>
public interface StudentMapper {
	//#{}里面写@Param("内容")参数中内容
	Student selStudent(@Param("name")String sname, @Param("age")String sage);
	//使用mybatis注解
	@Select("select * from student")
	List<Student> selAll();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值