700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MyBatis实现级联查询及逆向生成

MyBatis实现级联查询及逆向生成

时间:2023-10-05 06:23:43

相关推荐

MyBatis实现级联查询及逆向生成

MyBatis实现级联查询及逆向生成

一,级联查询

1、级联查询 N-1

​ 以多的一方为主表

接口

//级联查询 N-1List<Emp> selectEmp(Map map);

映射文件

<!--级联查询 N-1 --><resultMap id="emp_Dept" type="emp"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="sex" property="sex"/><result column="salary" property="salary"/><result column="bonus" property="bonus"/><result column="birth" property="birth"/><result column="hiredate" property="hiredate"/><result column="leader" property="leader"/><result column="deptid" property="deptid"/><association property="dept" javaType="dept"><id column="id" property="id"/><result column="dname" property="dname"/></association></resultMap><select id="selectEmp" resultMap="emp_Dept" parameterType="map">select * from emp e left join dept d on e.deptid=d.id<where><if test="name!=null">name like "%"#{name}"%"</if></where>limit #{start},#{size}</select>

一的一方的数据封装使用association标签

​ 使用JavaType固定搭配

​ 对应javabean中的属性

测试类

SqlSession session=null;@Beforepublic void init() throws IOException {InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(is);session=factory.openSession();}//级联查询N-1@Testpublic void selectEmp() {HashMap map = new HashMap();map.put("name","关");map.put("start",0);map.put("size",3);List<Emp> emps = session.getMapper(EmpMapper.class).selectEmp(map);System.out.println(emps);}@Afterpublic void destory(){if (session!=null){try {mit();}catch (Exception e){session.rollback();}finally {session.close();}}}

2、级联查询 1-N

​ 以一的一方为主表

映射文件

<!--级联查询 1-N --><resultMap id="dept_Emp" type="dept"><id column="did" property="id"/><result column="dname" property="dname"/><collection property="emps" ofType="emp"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="sex" property="sex"/><result column="salary" property="salary"/><result column="bonus" property="bonus"/><result column="birth" property="birth"/><result column="hiredate" property="hiredate"/><result column="leader" property="leader"/><result column="deptid" property="deptid"/></collection></resultMap><select id="selectDept" resultMap="dept_Emp" parameterType="map">select e.*,d.id did,d.dname from emp e left join dept d on e.deptid=d.id<where><if test="dname!=null">dname like "%"#{dname}"%"</if></where>limit #{start},#{size}</select>

多的一方的数据使用collection标签封装

​ 固定搭配 ofType

​ 对应javabean中的属性

测试类

SqlSession session=null;@Beforepublic void init() throws IOException {InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(is);session=factory.openSession();}//级联查询1-N@Testpublic void selectDept() {HashMap map = new HashMap();map.put("dname","蜀");map.put("start",0);map.put("size",3);List<Dept> depts = session.getMapper(EmpMapper.class).selectDept(map);System.out.println(depts);}@Afterpublic void destory(){if (session!=null){try {mit();}catch (Exception e){session.rollback();}finally {session.close();}}}

总结

一对多 以一的一方为主表; 多对一 以多的一方为主表

Association 封装一的一方的数据,固定类型搭配 javaType。

collection封装多的一方的数据,固定类型搭配 ofType。

二、逆向生成

1、.Pom.xml中的依赖

<!--逆向生成配置--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version></dependency><!--逆向生成带分页的插件--><dependency><groupId>com.itfsw</groupId><artifactId>mybatis-generator-plugin</artifactId><version>1.0.5</version></dependency><!--日志输出--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.25</version><scope>test</scope></dependency>

2、逆向生成配置文件 MyBatisGenerator.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-////DTD MyBatis Generator Configuration 1.0//EN""/dtd/mybatis-generator-config_1_0.dtd"><!-- 生成配置文件 --><generatorConfiguration><context id="DB2Tables" targetRuntime="MyBatis3"><!--分页插件--><plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin"/><commentGenerator><!-- 是否去除注释,true表示是,false否 --><property name="suppressAllComments" value="true"/></commentGenerator><!-- 1.连接数据库信息 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/k9503?characterEncoding=UTF-8"userId="root"password="171009"></jdbcConnection><!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- 2.pojo类的生成配置 targetPackage表示目标文件夹targetProject表示当前目标文件夹所放置的目标地址--><javaModelGenerator targetPackage="com.pojo" targetProject=".\src\main\java"><property name="enableSubPackages" value="true"/><property name="trimStrings" value="true"/></javaModelGenerator><!-- 3.sql映射文件生成配置 --><sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources"><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 4.mapper接口配置 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject=".\src\main\java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 5.数据库表和实体类映射 --><table tableName="emp" domainObjectName="Emp"></table><table tableName="dept" domainObjectName="Dept"></table></context></generatorConfiguration>

此配置文件必须放在整个工程的目录下

可能需要修改的部分:

数据库连接信息实体类的生成路径Sql映射文件的生成路径Mapper接口的生成路径数据库表 表名 和 关联的 实体类的类名

3、自动生成的测试方法

@Testpublic void create() throws Exception{List<String> warnings = new ArrayList<String>();boolean overwrite = true;File configFile = new File("MybatisGenerator.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(configFile);DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback,warnings);myBatisGenerator.generate(null);}

注意

核心配置文件 sqlMapConfig.xml的导入 db.properties 数据库四大参数配置文件的导入核心配置文件中 对映射文件的关联

在准备工作都完成之后,执行测试方法,即可自动生成成javabean 和 接口 以及 映射文件

在生成的pojo中还有一个Example类 该类封装了所有属性的各种条件查询

通过example对象创建criteria对象,该对象通过sql拼接的方式 实现条件的封装,所以开发人员只需要调用相应

方法即可完成带条件的增删改查。

逆向工程没有提供 分页查询 和两个表的 级联查询 这一块需要我们自己去补充添加。

4、测试类

@Test//修改public void update() {Emp emp = new Emp();emp.setName("虚竹");EmpExample example = new EmpExample();EmpExample.Criteria criteria = example.createCriteria();criteria.andNameLike("%小%");int i = session.getMapper(EmpMapper.class).updateByExampleSelective(emp, example);System.out.println(i);}@Test//条件查询public void select(){EmpExample example = new EmpExample();EmpExample.Criteria criteria = example.createCriteria();criteria.andNameLike("%%");example.limit(5,5);List<Emp> emps = session.getMapper(EmpMapper.class).selectByExample(example);System.out.println(emps);}@Test//动态新增public void insert(){Emp emp = new Emp();emp.setName("萧寒");emp.setSex("男");emp.setAge(22);emp.setBonus(1500.00);int i = session.getMapper(EmpMapper.class).insertSelective(emp);System.out.println(i);}@Test//删除public void delete(){EmpExample example = new EmpExample();EmpExample.Criteria criteria = example.createCriteria();criteria.andNameLike("%彭%");int i = session.getMapper(EmpMapper.class).deleteByExample(example);System.out.println(i);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。