Mybatis逆向工程——(十四)
逆向工程可以快速将数据库的表生成JavaBean,同时生成对单标操作的Mapper.java与Mapper.xml,极大地提高了开发速度。
1.jar包
aaarticlea/png;base64,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" alt="" />
2.配置文件
需要修改数据库连接信息,mapper生成目录与pojo生成位置,也要修改要导出的表。
工程目录下配置generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/exam" userId="root"
password="123456">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> --> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver> <!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="cn.xm.pojo"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="cn.xm.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="cn.xm.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table tableName="blacklist"></table>
<table tableName="breakrules"></table>
<table tableName="checkrecord"></table>
<table tableName="department"></table>
<table tableName="dictionary"></table>
<table tableName="employee_in"></table>
<table tableName="employee_out"></table>
<table tableName="employeeexam"></table>
<table tableName="exam"></table>
<table tableName="exampaper"></table>
<table tableName="historypaperoption"></table>
<table tableName="historypaperquestion"></table>
<table tableName="newsrecord"></table>
<table tableName="onlineexamanswerinfor"></table>
<table tableName="onlineexaminfor"></table>
<table tableName="options"></table>
<table tableName="permission"></table>
<table tableName="pictureindex"></table>
<table tableName="project"></table>
<table tableName="questionbank"></table>
<table tableName="questions"></table>
<table tableName="role"></table>
<table tableName="rolepermission"></table>
<table tableName="traincontent"></table>
<table tableName="unit"></table>
<table tableName="unitproject"></table>
<table tableName="userrole"></table> </context>
</generatorConfiguration>
3. Java程序
package mybatisInverse;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback; public class GeneratorSqlmap
{
public void generator()
throws Exception
{
List<String> warnings = new ArrayList();
boolean overwrite = true; File configFile = new File("generatorConfig.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);
} public static void main(String[] args)
throws Exception
{
try
{
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
运行结果:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAALwAAAAzCAIAAACizfXxAAAExElEQVR4nO2a/08TZxzH7z9aFmPiLpF1UyczbgQW3VQ2C8xzKxtLINMWZ8uXFUGjPdYfNr7MshU6IrPMMG9fVIxduhYsOqIppKchSCezLd1GYOmymGc/tL270rvrPReuHu3nlQv0nvs8d5/e8+7zfO7yJpAsj3300oRxPWwdP1eZmm9b+PZI4u5YKtyVCp9JhbtTcz0x/6mJzpdjD2fkzwOUEoT84bmhg6sh8z/hT51N2/970P339ImIp85r2eG17LhseWGic0/AbV7/c7k4uQI6oYBo7vS++FfwxNMFR/TXU08XHLHJD8JfHSpOZoBuKSCa+P2rU2e3B7qeS28h2pCM3CxKYoB+KSAaAMgHRANgA6IBsAHRANiAaABsQDQANsUWjf29d4p8RWDT0Vw0v5yt9/XU+9J/e+obd20T7gZ6TVonAGw6akTj9/vX1tYUBt+w1896rXOM/d64LdBv6j68a9Z7ep6x3xu3+b8wTdqNKhIAni1qROPxeEZHRxOJhJLgn9qOLk73x+c9S6HBu2Ot7uYDi1N98XnP0sxgyHPyWvvbKhIAni0qRROLxQYGBqLRaMHgq5/URm7Sj24PPLj12fTwx85392V2fc7gUPMPpw9Ld2UoIgNJswgxFEHSNCVo4WFpkiAohutGMZl4hiYJguAaxPoqimQzRwnuMoilSYJi+CQLted/o9zgvLR0i0rRIIQSiQRN05FIRD74yslDQbc5dMkaHLbc6D3WccAQcJtDl6xTI5brFxq+t7wl0Y+hNt5GhuJGgKXJvHvMUARJs9l/2fj05/Rg8X0F46gokqWp7NWykszqKHuqwu18ZoJT5wZvEdSLBiG0vLzc3t6eTCalIltq9ppe2mZ/0+BqqnEc3Wur3tlaZbBV72yrqXAYKy9+WPO+4Xnx5ynhHRZpYmky/4eZHnBSMLwFP2NE5s01G9SXowORdn6WEU42IhLWP+pFs7KyUnCmiT/+3XX89ZC3M/zzhTvfdV13NlqrK25f7phlzv12pWvSaXId37/y5A+RnroSDUuT3HmF0w+uaEQWoHISTTweV1jTDJuqFqf70oVw6BuzrbqCK4QDrpaRxtck+vHTOkIMzdU0G0QjWKfSh/MauLOJSoFbk2QjBW2C4klYRylpF34jxFCSi6X+0fzpaejYfq4QDgy1OIyVXCHs6//oa2qfZE9+PRCtCXIGXlABccO0eaIRpEJSVM5MQ+XXu1LtMtW0khupIzR/TzNY92rQbZ4Zs02NtF473+BqeoPb/fGM8WJDpYoE9IHUeG9JHWCh+Rvhvtrdn9fu4baOgzm7X9a9onUCmgGi0YzUanItHuW25qrdwt1/11e1TkAzQDTFQvxZCdhSgDUCwAZEA2ADogGwAdEA2IBoAGxANAA24BHGR8yYUVaARxgfEI2KPuARLnPAIwxgAx5hpNDVK2FnEAsodcAjjGRdvYLLcO38GSQCSh3wCCPFBs1sOxcuFVDqgEcY4Ygm1wwuFVDqgEcYybt6c1YfPlw2oNQBjzCSc/VCISwGeIQRdi1SLqWLJOARRrgqKPsXwuARRghDNJm1qKynGQQeYUAFYI0AsAHRANiAaABsQDQANiAaABsQDYBNKXmE1b6phbd1mPwP8MuMxo6FwWAAAAAASUVORK5CYII=" alt="" />
4.使用生成的代码:
对单表操作较方便,可以自定义条件查询。
sqlMapConfig.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="db.properties">
<!--properties中还可以配置一些属性名和属性值 -->
<!-- <property name="jdbc.driver" value=""/> -->
</properties>
<!-- 全局配置参数,需要时再设置 -->
<!-- <settings> </settings> --> <!-- 别名定义 -->
<typeAliases> <!-- 针对单个别名定义
type:类型的路径
alias:别名
-->
<!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
<!-- 批量别名定义
指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)
-->
<package name="cn.xm.pojo"/> </typeAliases> <!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis-->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理-->
<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>
<!-- 加载 映射文件 -->
<mappers>
<!--通过resource方法一次加载一个映射文件 -->
<!-- <mapper resource="mapper/UserMapper.xml"/> --> <!-- 通过mapper接口加载单个 映射文件
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
上边规范的前提是:使用的是mapper代理方法
-->
<!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!-- 批量加载mapper
指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
上边规范的前提是:使用的是mapper代理方法
-->
<package name="cn.xm.mapper"/> </mappers> </configuration>
java代码:
package cn.xm.test; import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmxMBean;
import org.junit.Before;
import org.junit.Test; import cn.xm.mapper.EmployeeInMapper;
import cn.xm.pojo.EmployeeIn;
import cn.xm.pojo.EmployeeInExample; public class MybatisTest { private SqlSessionFactory sqlSessionFactory; @Before
public void setUp() throws Exception {
// 将全局配置文件作为一个流
String resource = "sqlMapConfig.xml";
URL realPath2 = Resources.getResourceURL("sqlMapConfig.xml");
InputStream inputStream = Resources.getResourceAsStream(resource);
// 建立一个SqlSession工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} // 测试增加
@Test
public void testAdd() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession();
EmployeeInMapper eim = sqlSession.getMapper(EmployeeInMapper.class);
EmployeeIn sl = new EmployeeIn();
sl.setIdcode("33");
sl.setEmployeeid("3");
sl.setEmployeenumber("3");
sl.setPassword("33333");
;
sl.setName("王五");
eim.insert(sl);
sqlSession.commit();
sqlSession.close();
} // 测试删除
@Test
public void testDeleteById() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession();
EmployeeInMapper eim = sqlSession.getMapper(EmployeeInMapper.class);
eim.deleteByPrimaryKey("3");
sqlSession.commit();
sqlSession.close();
} // 测试修改
@Test
public void fun2() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmployeeInMapper eim = sqlSession.getMapper(EmployeeInMapper.class);
EmployeeIn selectByPrimaryKey = eim.selectByPrimaryKey("3");
selectByPrimaryKey.setName("这是修改后的值");
eim.updateByPrimaryKey(selectByPrimaryKey);
sqlSession.commit();
sqlSession.close();
} // 测试通过id查询单个
@Test
public void fun3() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmployeeInMapper eim = sqlSession.getMapper(EmployeeInMapper.class);
EmployeeIn selectByPrimaryKey = eim.selectByPrimaryKey("3");
System.out.println(selectByPrimaryKey);
} // 自定义条件查询 查询名字为张三的
@Test
public void testSelectByExample() {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmployeeInMapper eim = sqlSession.getMapper(EmployeeInMapper.class);
EmployeeInExample employeeInExample = new EmployeeInExample();
// 通过criteria构造查询条件
EmployeeInExample.Criteria criteria = employeeInExample.createCriteria();
criteria.andNameEqualTo("张三");
// 可能返回多条记录
List<EmployeeIn> list = eim.selectByExample(employeeInExample);
System.out.println(list); } // 自定义条件查询 查询名字为张三的且password为44444的
@Test
public void testSelectByExample1() {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmployeeInMapper eim = sqlSession.getMapper(EmployeeInMapper.class);
EmployeeInExample employeeInExample = new EmployeeInExample();
// 通过criteria构造查询条件
EmployeeInExample.Criteria criteria = employeeInExample.createCriteria();
criteria.andNameEqualTo("张三");
criteria.andPasswordEqualTo("44444");
// 可能返回多条记录
List<EmployeeIn> list = eim.selectByExample(employeeInExample);
System.out.println(list); } // 自定义条件查询 查询所有,只是不封装条件
@Test
public void testSelectByExample3() {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmployeeInMapper eim = sqlSession.getMapper(EmployeeInMapper.class);
EmployeeInExample employeeInExample = new EmployeeInExample();
// 通过criteria构造查询条件
EmployeeInExample.Criteria criteria = employeeInExample.createCriteria();
// 可能返回多条记录
List<EmployeeIn> list = eim.selectByExample(employeeInExample);
System.out.println(list); }
}
补充:今天我同学问我如何用Criteria去执行类似于or的语句,例如:select * from user where usercode="lll" or password="lll"
经过网上查阅资料发现是重新再构造一个criteria,并手动注入到example中:
@Test
public void test1(){
UserExample userExample = new UserExample();
UserExample.Criteria criteria_1 = userExample.createCriteria();
criteria_1.andUsercodeEqualTo("111");
UserExample.Criteria criteria_2 = userExample.createCriteria();
criteria_2.andPasswordEqualTo("111");
userExample.or(criteria_2);
List<User> users = userMapper.selectByExample(userExample);
for(User u:users){
System.out.println("--------------------SSSSSSSSSSSSSSSSSSSSSSSSS------------"+u);
}
}
查看日志:
16:37:15,550 DEBUG selectByExample:132 - ==> Preparing: select userID, userCode, userName, password, userSort, remark2 from user WHERE ( userCode = ? ) or( password = ? )
16:37:15,622 DEBUG selectByExample:132 - ==> Parameters: 111(String), 111(String)
另外逆向工程导出的mapper还可以设置排序和distinct
public void test1(){
UserExample userExample = new UserExample();
/*封装查询条件*/
UserExample.Criteria criteria_1 = userExample.createCriteria();
criteria_1.andUsercodeEqualTo("111");
UserExample.Criteria criteria_2 = userExample.createCriteria();
criteria_2.andPasswordEqualTo("111");
userExample.or(criteria_2);
/*封装排序(姓名降序-密码升序)*/
userExample.setOrderByClause("username desc,password");
/*是否是distinct*/
userExample.setDistinct(true);
List<User> users = userMapper.selectByExample(userExample);
for(User u:users){
System.out.println(u);
}
}
查看日志
16:43:09,575 DEBUG selectByExample:132 - ==> Preparing: select distinct userID, userCode, userName, password, userSort, remark2 from user WHERE ( userCode = ? ) or( password = ? ) order by username desc,password
16:43:09,670 DEBUG selectByExample:132 - ==> Parameters: 111(String), 111(String)
使用逆向工程修改指定的列;
类似于直接修改。
aaarticlea/png;base64,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" alt="" />
如果调用:
aaarticlea/png;base64,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" alt="" />
如果某些列为空它也会指控。类似于先删除然后添加。添加后来新的对象。
最后附一个完整的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" >
<mapper namespace="cn.xm.exam.mapper.trainContent.TraincontentMapper" >
<resultMap id="BaseResultMap" type="cn.xm.exam.bean.trainContent.Traincontent" >
<id column="documentId" property="documentid" jdbcType="INTEGER" />
<result column="departmentId" property="departmentid" jdbcType="VARCHAR" />
<result column="documentName" property="documentname" jdbcType="VARCHAR" />
<result column="trainType" property="traintype" jdbcType="VARCHAR" />
<result column="departmentName" property="departmentname" jdbcType="VARCHAR" />
<result column="knowledgeType" property="knowledgetype" jdbcType="VARCHAR" />
<result column="originalName" property="originalname" jdbcType="VARCHAR" />
<result column="currentName" property="currentname" jdbcType="VARCHAR" />
<result column="upTime" property="uptime" jdbcType="TIMESTAMP" />
<result column="size" property="size" jdbcType="VARCHAR" />
<result column="employeeName" property="employeename" jdbcType="VARCHAR" />
<result column="level" property="level" jdbcType="VARCHAR" />
<result column="description" property="description" jdbcType="VARCHAR" />
<result column="browseTimes" property="browsetimes" jdbcType="INTEGER" />
</resultMap>
<sql id="Example_Where_Clause" >
<where >
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause" >
<where >
<foreach collection="example.oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List" >
documentId, departmentId, documentName, trainType, departmentName, knowledgeType,
originalName, currentName, upTime, size, employeeName, level, description, browseTimes
</sql>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="cn.xm.exam.bean.trainContent.TraincontentExample" >
select
<if test="distinct" >
distinct
</if>
<include refid="Base_Column_List" />
from traincontent
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null" >
order by ${orderByClause}
</if>
</select>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from traincontent
where documentId = #{documentid,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from traincontent
where documentId = #{documentid,jdbcType=INTEGER}
</delete>
<delete id="deleteByExample" parameterType="cn.xm.exam.bean.trainContent.TraincontentExample" >
delete from traincontent
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="cn.xm.exam.bean.trainContent.Traincontent" >
insert into traincontent (documentId, departmentId, documentName,
trainType, departmentName, knowledgeType,
originalName, currentName, upTime,
size, employeeName, level,
description, browseTimes)
values (#{documentid,jdbcType=INTEGER}, #{departmentid,jdbcType=VARCHAR}, #{documentname,jdbcType=VARCHAR},
#{traintype,jdbcType=VARCHAR}, #{departmentname,jdbcType=VARCHAR}, #{knowledgetype,jdbcType=VARCHAR},
#{originalname,jdbcType=VARCHAR}, #{currentname,jdbcType=VARCHAR}, #{uptime,jdbcType=TIMESTAMP},
#{size,jdbcType=VARCHAR}, #{employeename,jdbcType=VARCHAR}, #{level,jdbcType=VARCHAR},
#{description,jdbcType=VARCHAR}, #{browsetimes,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="cn.xm.exam.bean.trainContent.Traincontent" >
insert into traincontent
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="documentid != null" >
documentId,
</if>
<if test="departmentid != null" >
departmentId,
</if>
<if test="documentname != null" >
documentName,
</if>
<if test="traintype != null" >
trainType,
</if>
<if test="departmentname != null" >
departmentName,
</if>
<if test="knowledgetype != null" >
knowledgeType,
</if>
<if test="originalname != null" >
originalName,
</if>
<if test="currentname != null" >
currentName,
</if>
<if test="uptime != null" >
upTime,
</if>
<if test="size != null" >
size,
</if>
<if test="employeename != null" >
employeeName,
</if>
<if test="level != null" >
level,
</if>
<if test="description != null" >
description,
</if>
<if test="browsetimes != null" >
browseTimes,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="documentid != null" >
#{documentid,jdbcType=INTEGER},
</if>
<if test="departmentid != null" >
#{departmentid,jdbcType=VARCHAR},
</if>
<if test="documentname != null" >
#{documentname,jdbcType=VARCHAR},
</if>
<if test="traintype != null" >
#{traintype,jdbcType=VARCHAR},
</if>
<if test="departmentname != null" >
#{departmentname,jdbcType=VARCHAR},
</if>
<if test="knowledgetype != null" >
#{knowledgetype,jdbcType=VARCHAR},
</if>
<if test="originalname != null" >
#{originalname,jdbcType=VARCHAR},
</if>
<if test="currentname != null" >
#{currentname,jdbcType=VARCHAR},
</if>
<if test="uptime != null" >
#{uptime,jdbcType=TIMESTAMP},
</if>
<if test="size != null" >
#{size,jdbcType=VARCHAR},
</if>
<if test="employeename != null" >
#{employeename,jdbcType=VARCHAR},
</if>
<if test="level != null" >
#{level,jdbcType=VARCHAR},
</if>
<if test="description != null" >
#{description,jdbcType=VARCHAR},
</if>
<if test="browsetimes != null" >
#{browsetimes,jdbcType=INTEGER},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="cn.xm.exam.bean.trainContent.TraincontentExample" resultType="java.lang.Integer" >
select count(*) from traincontent
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map" >
update traincontent
<set >
<if test="record.documentid != null" >
documentId = #{record.documentid,jdbcType=INTEGER},
</if>
<if test="record.departmentid != null" >
departmentId = #{record.departmentid,jdbcType=VARCHAR},
</if>
<if test="record.documentname != null" >
documentName = #{record.documentname,jdbcType=VARCHAR},
</if>
<if test="record.traintype != null" >
trainType = #{record.traintype,jdbcType=VARCHAR},
</if>
<if test="record.departmentname != null" >
departmentName = #{record.departmentname,jdbcType=VARCHAR},
</if>
<if test="record.knowledgetype != null" >
knowledgeType = #{record.knowledgetype,jdbcType=VARCHAR},
</if>
<if test="record.originalname != null" >
originalName = #{record.originalname,jdbcType=VARCHAR},
</if>
<if test="record.currentname != null" >
currentName = #{record.currentname,jdbcType=VARCHAR},
</if>
<if test="record.uptime != null" >
upTime = #{record.uptime,jdbcType=TIMESTAMP},
</if>
<if test="record.size != null" >
size = #{record.size,jdbcType=VARCHAR},
</if>
<if test="record.employeename != null" >
employeeName = #{record.employeename,jdbcType=VARCHAR},
</if>
<if test="record.level != null" >
level = #{record.level,jdbcType=VARCHAR},
</if>
<if test="record.description != null" >
description = #{record.description,jdbcType=VARCHAR},
</if>
<if test="record.browsetimes != null" >
browseTimes = #{record.browsetimes,jdbcType=INTEGER},
</if>
</set>
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map" >
update traincontent
set documentId = #{record.documentid,jdbcType=INTEGER},
departmentId = #{record.departmentid,jdbcType=VARCHAR},
documentName = #{record.documentname,jdbcType=VARCHAR},
trainType = #{record.traintype,jdbcType=VARCHAR},
departmentName = #{record.departmentname,jdbcType=VARCHAR},
knowledgeType = #{record.knowledgetype,jdbcType=VARCHAR},
originalName = #{record.originalname,jdbcType=VARCHAR},
currentName = #{record.currentname,jdbcType=VARCHAR},
upTime = #{record.uptime,jdbcType=TIMESTAMP},
size = #{record.size,jdbcType=VARCHAR},
employeeName = #{record.employeename,jdbcType=VARCHAR},
level = #{record.level,jdbcType=VARCHAR},
description = #{record.description,jdbcType=VARCHAR},
browseTimes = #{record.browsetimes,jdbcType=INTEGER}
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByPrimaryKeySelective" parameterType="cn.xm.exam.bean.trainContent.Traincontent" >
update traincontent
<set >
<if test="departmentid != null" >
departmentId = #{departmentid,jdbcType=VARCHAR},
</if>
<if test="documentname != null" >
documentName = #{documentname,jdbcType=VARCHAR},
</if>
<if test="traintype != null" >
trainType = #{traintype,jdbcType=VARCHAR},
</if>
<if test="departmentname != null" >
departmentName = #{departmentname,jdbcType=VARCHAR},
</if>
<if test="knowledgetype != null" >
knowledgeType = #{knowledgetype,jdbcType=VARCHAR},
</if>
<if test="originalname != null" >
originalName = #{originalname,jdbcType=VARCHAR},
</if>
<if test="currentname != null" >
currentName = #{currentname,jdbcType=VARCHAR},
</if>
<if test="uptime != null" >
upTime = #{uptime,jdbcType=TIMESTAMP},
</if>
<if test="size != null" >
size = #{size,jdbcType=VARCHAR},
</if>
<if test="employeename != null" >
employeeName = #{employeename,jdbcType=VARCHAR},
</if>
<if test="level != null" >
level = #{level,jdbcType=VARCHAR},
</if>
<if test="description != null" >
description = #{description,jdbcType=VARCHAR},
</if>
<if test="browsetimes != null" >
browseTimes = #{browsetimes,jdbcType=INTEGER},
</if>
</set>
where documentId = #{documentid,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="cn.xm.exam.bean.trainContent.Traincontent" >
update traincontent
set departmentId = #{departmentid,jdbcType=VARCHAR},
documentName = #{documentname,jdbcType=VARCHAR},
trainType = #{traintype,jdbcType=VARCHAR},
departmentName = #{departmentname,jdbcType=VARCHAR},
knowledgeType = #{knowledgetype,jdbcType=VARCHAR},
originalName = #{originalname,jdbcType=VARCHAR},
currentName = #{currentname,jdbcType=VARCHAR},
upTime = #{uptime,jdbcType=TIMESTAMP},
size = #{size,jdbcType=VARCHAR},
employeeName = #{employeename,jdbcType=VARCHAR},
level = #{level,jdbcType=VARCHAR},
description = #{description,jdbcType=VARCHAR},
browseTimes = #{browsetimes,jdbcType=INTEGER}
where documentId = #{documentid,jdbcType=INTEGER}
</update>
</mapper>
附一个测试工程的下载地址: http://qiaoliqiang.cn/fileDown/MybatisInverse.zip
Mybatis逆向工程——(十四)的更多相关文章
- mybatis学习 十四 resultMap标签 一对一(联合查询)
1.使用 resultMap 实现关联单个对象(联合查询方式) <resultMap type="Student" id="stuMap1"> &l ...
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十四天(非原创)
文章大纲 一.淘淘商城总体架构介绍二.淘淘商城重要技术点总结三.项目常见面试题四.项目学习(all)资源下载五.参考文章 一.淘淘商城总体架构介绍 1. 功能架构 2. 技术选型 (1)Sprin ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...
- MyBatis基础入门《十四》ResultMap子元素(association )
MyBatis基础入门<十四>ResultMap子元素(association ) 1. id: >> 一般对应数据库中改行的主键ID,设置此项可以提高Mybatis的性能 2 ...
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
如约而至,Java 10 正式发布! 3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...
- 浅析MyBatis(四):全自动写代码的MyBatis逆向工程
在前面几篇文章中,笔者介绍了 MyBatis 的运行流程,在此基础上简单介绍了手写 MyBatis 简易框架与自定义 MyBatis 插件的步骤,相信大家对于 MyBatis 框架的使用流程已经游刃有 ...
- mybatis框架(7)---mybatis逆向工程
mybatis逆向工程 逆向工程的目的就是缩减了我们的开发时间.所谓mybatis逆向工程,就是mybatis会根据我们设计好的数据表,自动生成pojo.mapper以及mapper.xml. 接 ...
- 学习笔记01(mybatis逆向工程)
今天来看看一个常用的小功能,就是mybatis的逆向工程.(数据库是mysql) 什么是逆向工程呢?看名字就知道反方向的一个什么工程! 其实啊,如果是平常我们自己学习实践一些小项目的时候,应该是先瞎写 ...
- Mybatis逆向工程生成po、mapper接口、mapper.xml
Mybatis逆向工程生成po.mapper接口.mapper.xml 一.新建一个maven工程 请查看我的另一篇博客:<使用idea创建一个maven工程> 二.引入所需依赖 需要my ...
- 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645 开发指南专题十四:J ...
随机推荐
- Linux第一周学习总结——计算机是如何工作的
第一周学习总结--计算机是如何工作的 作者:刘浩晨 一.存储程序计算机工作模型 冯诺依曼体系结构:核心思想为存储程序计算机.两个层面: (1)硬件的角度(计算机主板):一个CPU,一块内存,之间有总线 ...
- 这个不是第一次作业----艰难的安装Android studio历程
之前只听说过eclipse,后来从室友处得知,还有一个安卓的开发工具叫做Android studio,上网百度后发现网友普遍说Android studio比eclipse快,没想太多,删E装A. 在装 ...
- Iterative Quantization,ITQ
Abstract 针对大规模的图像检索问题,论文提出了一个高效的ITQ算法.该算法先将中心化后的数据映射到超立方体的顶点上,再通过优化过程寻找一个旋转矩阵,使得数据点经过旋转后,与超立方体的顶点数据具 ...
- NetFPGA Demo ——reference_nic_nf1_cml
NetFPGA Demo --reference_nic_nf1_cml 实验平台 OS:deepin 15.4 开发板:NetFPGA_1G_CML 实验过程 从NetFPGA-1G-CML从零开始 ...
- php://input 和 $HTTP_ROW_POST_DATE
前言: 年前又换了一家公司.毕业半年,加上之前的实习,第四家公司了.短短半年经历了很多,就这样度过了我的2018.毕业.实习.就业.创业.公司倒闭.频繁跳槽.开工作室净赔.年前自我感觉糟透了,一团糟, ...
- C++中关键字explicit的作用
C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色. 1 是个构造器 ,2 是个默认且隐含的类型转换操作符. 所以, 有时候在我们写下如 AAA ...
- nodejs nodemailer 使用
index.js const nodemailer=require("nodemailer") let sendEmail=function () { var transporte ...
- Java时间的转换
String DATE_FORMAT = "yyyy-MM-dd"; LocalDate localDate = LocalDate.now(); long startTime = ...
- 美团 OCTO 分布式服务治理系统
OCTO 是美团千亿调用量的分布式服务通信框架及服务治理的系统,可实现服务注册.服务自动发现.服务管理.容错处理.数据可视化.服务监控报警.服务分组等.本文总结了 OCTO 架构原理.Java 应用的 ...
- BZOJ5287 HNOI2018毒瘤(虚树+树形dp)
显然的做法是暴力枚举非树边所连接两点的选或不选,大力dp.考场上写的是最暴力的O(3n-mn),成功比大众分少10分.容斥或者注意到某些枚举是不必要的就能让底数变成2.但暴力的极限也就到此为止. 每次 ...