mybatis

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 resource="jdbc.properties">
	</properties>
	<!--传入的参数的字段为null对象无法获取对应的jdbcType类型,而报的错误。  -->
	<settings>
		<setting name="jdbcTypeForNull" value="NULL"/>
	</settings>
	<!-- 注册别名   别名在這个类中TypeAliasRegistry -->
	<typeAliases>
		<!-- 单个别名    -->
		<typeAlias type="cn.et.day20170614.entity.DeptEntity" alias="dept"/>
		<!-- 也可以整包注册列名小写就是它的别名
		<package name="cn.et.day20170614.entity"/> -->
	</typeAliases>
	<!-- 开发坏境    development是开发者坏境-->
	<environments default="development">
	<!-- 数据配置 -->
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driverClassName}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${userAccount}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  	<!-- 注册注释接口  和 xml映射文件 -->
  	<mapper class="cn.et.day20170609.dao.EmpJaxaDao"/>
  	<mapper class="cn.et.day20170612.NoteIfDao"/>
  	<mapper class="cn.et.day20170612.CallFuncInterfaceDao"/>
  	<mapper class="cn.et.day20170614.anno.EmpMappingDeptDao"/>
  	<mapper class="cn.et.day20170614.anno.DeptMappingEmpDao"/>
  	
  	<mapper class="cn.et.day20170615.dao.LabelDao"/>
  	
  	<mapper resource="cn/et/day20170612/func_mapper.xml"/>
  	<mapper resource="cn/et/day20170612/selectKey_mapper.xml"/>
  	<mapper resource="emp_mapper.xml"/>
  	<mapper resource="cn/et/day20170609/dept_mapper.xml"/>
  	<mapper resource="cn/et/day20170614/xml/emp_mapper.xml"/>
  	<mapper resource="cn/et/day20170614/xml/dept_mapper.xml"/>
  </mappers>
</configuration>



用注解   实体类一对多用泛型集合  多对一用对象
	/**
	 * @Results 返回的映射   如果数据库名字和实体类的属性名对不上就是可以通过   column指定列名(不区分大小写)   property对象属性名(区分大小写)
	 *           默认的规则是全转小写再匹配的
	 *          一对多用many(要导包CGLIB)
			多对一用one       
	 *          fetchType 延时机制(也叫懒机制) 是你用到的时候再加载
	 *           数据属性名和实体类的名字对不像就通过result设置 
     			property="list"属性名 column="deptno"数据库的列名
	 * @param empno
	 * @return
	 */
	@Results({
		@Result(column="deptno",property="list",javaType=java.util.List.class,
				many=@Many(select="cn.et.day20170614.anno.DeptMappingEmpDao.queryEmp",fetchType=FetchType.LAZY)
				)
	}	
	)
	@Select(value="select * from dept where deptno=#{deptno}")
	public DeptEntity queryDept(String deptno);
	@Select(value="select * from emp where deptno=#{deptno}")
	public List<EmpEntity> queryEmp();

xml加实体类 

namespace是包名加类名
id是方法名

collection是一对多

association 是多对一

<?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">
<!-- 
   /add.do   namespace /user   访问 /user/add.do
   /add.do   namespace /dept    访问 /dept/add.do
  namespace是为了解决相同名字的sql操作问题  
 -->
<mapper namespace="cn.et.day20170614.xml.DeptMappingEmpDao">
  <!-- 标识符  用于唯一标示一条sql语句 
      resultType 标示单行记录的类型
     1 max(列)+1  只允许单线程   不建议在开发坏境中用  开发测试可以用
     2 序列  只允许单数据库的情况  next 开发坏境
     3 uuid 分布式应用程序   (select sys_guid from dual)
     fetchType 延时机制(也叫懒机制) 是你用到的时候再加载 (fetchType="lazy")
     数据属性名和是实体的名字对不像就通过result设置 
     property="list"属性名 column="deptno"数据库的列名
  -->
  	<resultMap type="dept" id="myDept">
  		<collection property="list" column="deptno" javaType="list" 
  			select="cn.et.day20170614.xml.DeptMappingEmpDao.queryEmp" fetchType="lazy">
  		</collection>
  	</resultMap>
 	<select id="queryDept" resultMap="myDept">
 		select * from dept where deptno=#{deptno}
 	</select>
 	
 	<select id="queryEmp"  resultType="cn.et.day20170614.entity.EmpEntity">
		select * from emp where deptno=#{deptno}
	</select>
</mapper>



过程函数的调用

xml加接口调用 

<?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">
<!-- 
   /add.do   namespace /user   访问 /user/add.do
   /add.do   namespace /dept    访问 /dept/add.do
  namespace是为了解决相同名字的sql操作问题 
 -->
<mapper namespace="cn.et.day20170612.CallFuncDao">
  <!-- 标识符  用于唯一标示一条sql语句 
      resultType 标示单行记录的类型
    	  调用过程
  -->
 <select id="callPro" parameterType="map" statementType="CALLABLE">
 				<!-- IN OUT  NUMERIC要大写-->
  				{call pro_add(
					#{p1,jdbcType=NUMERIC,mode=IN},
					#{p2,jdbcType=NUMERIC,mode=IN},
					#{p3,jdbcType=NUMERIC,mode=OUT})
				}
				
  </select>
  <!-- 调用函数 -->
  <select id="callFunc" parameterType="map" statementType="CALLABLE">
 				<!-- IN OUT  NUMERIC要大写-->
  				{#{p3,jdbcType=NUMERIC,mode=OUT}=call fun_add(
					#{p1,jdbcType=NUMERIC,mode=IN},
					#{p2,jdbcType=NUMERIC,mode=IN}
					)
				}
  </select>
</mapper>


注解调用

	@Select(value="<script>{call pro_add("+
					"#{p1,jdbcType=NUMERIC,mode=IN},"+
					"#{p2,jdbcType=NUMERIC,mode=IN},"+
					"#{p3,jdbcType=NUMERIC,mode=OUT})"+
			"}</script>")
	@Options(statementType=StatementType.CALLABLE )
	
	public void callPro(Map<String, Integer> map);
	@Select(value="<script>{#{p3,jdbcType=NUMERIC,mode=OUT}=call fun_add("+
			"#{p1,jdbcType=NUMERIC,mode=IN},"+
			"#{p2,jdbcType=NUMERIC,mode=IN}"+
			")"+
	"}</script>")
	@Options(statementType=StatementType.CALLABLE )
	public void callFunc(Map<String, Integer> map);

selectKey用法

<?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">
<!-- 
   /add.do   namespace /user   访问 /user/add.do
   /add.do   namespace /dept    访问 /dept/add.do
  namespace是为了解决相同名字的sql操作问题  
 -->
<mapper namespace="cn.et.day20170612.SelectKeyDao">
  <!-- 标识符  用于唯一标示一条sql语句 
      resultType 标示单行记录的类型
     1 max(列)+1  只允许单线程   不建议在开发坏境中用  开发测试可以用
     2 序列  只允许单数据库的情况  next 开发坏境
     3 uuid 分布式应用程序   (select sys_guid from dual)
  -->
 <insert id="selectKey" parameterType="map">
 			<selectKey order="BEFORE" keyProperty="deptno" resultType="int">
 				select max(deptno)+10 from dept
 			</selectKey>
 		insert into dept(deptno,dname) values(#{deptno},#{dname})
  </insert>
 
</mapper>


/**
	 * @Results 返回的映射   如果数据库名字和实体类的属性名对不上就是可以通过   column指定列名(不区分大小写)   property对象属性名(区分大小写)
	 *           默认的规则是全转小写再匹配的
	 *          一对多用many(要导包CGLIB)
	 *          fetchType 延时机制(也叫懒机制) 是你用到的时候再加载
	 *           数据属性名和实体类的名字对不像就通过result设置 
     			property="list"属性名 column="deptno"数据库的列名
	 * @param empno
	 * @return
	 */
	@Results({
		@Result(column="deptno",property="list",javaType=java.util.List.class,
				many=@Many(select="cn.et.day20170614.anno.DeptMappingEmpDao.queryEmp",fetchType=FetchType.LAZY)
				)
	}	
	)
	@Select(value="select * from dept where deptno=#{deptno}")
	public DeptEntity queryDept(String deptno);
	@Select(value="select * from emp where deptno=#{deptno}")
	public List<EmpEntity> queryEmp();



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值