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();
mybatis
最新推荐文章于 2023-08-14 23:29:59 发布