zoukankan      html  css  js  c++  java
  • mybatis笔记

    mybatis简介

      MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,

        并且改名为MyBatis 。2013年11月迁移到Github。

      MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,

        而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

      Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,

        并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。


     mybatis与hibernate不同

    Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

    Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

    Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。

    总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。


     Mybatis架构

    1.SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

       mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

    2.通过mybatis环境等配置信息构造SqlSessionFactory

    3.由工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

    4.mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

    5. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

    6.Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

    7.Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。


    准备工作

      导包

        导入mybatis核心包、依赖包、数据库驱动包。

      配置文件:

        log4j.properties

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

         SqlMapConfig.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration
     3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!-- 配置别名扫描器 -->
     7     <typeAliases>
     8         <package name="cn.mybatis.pojo"/>
     9         <package name="cn.mybatis.vo"/>
    10     </typeAliases>
    11     <environments default="development">
    12         <environment id="development">
    13             <!-- 使用jdbc管理事务 -->
    14             <transactionManager type="JDBC"/>
    15             <!-- 数据库连接池 -->
    16             <dataSource type="POOLED">
    17                 <property name="driver" value="com.mysql.jdbc.Driver" />
    18                 <property name="url" value="jdbc:mysql://localhost:3306/lucene"/>
    19                 <property name="username" value="root"/>
    20                 <property name="password" value="root"/>
    21             </dataSource>
    22         </environment>
    23     </environments>
    24     <!-- 配置扫描xml文件 -->
    25     <mappers>
    26         <package name="cn.mybatis.mapper"/>
    27     </mappers>
    28 </configuration>

      创建pojo

     1 package cn.mybatis.pojo;
     2 
     3 
     4 import java.io.Serializable;
     5 import java.util.Date;
     6 import java.util.List;
     7 
     8 public class User implements Serializable {
     9     /**
    10      * 
    11      */
    12     private static final long serialVersionUID = 1L;
    13     private Integer id;
    14     private String username;// 用户姓名
    15     private String sex;// 性别
    16     private Date birthday;// 生日
    17     private String address;// 地址
    18     private List<Orders> orderList;
    19 
    20     public List<Orders> getOrderList() {
    21         return orderList;
    22     }
    23     public void setOrderList(List<Orders> orderList) {
    24         this.orderList = orderList;
    25     }
    26     public Integer getId() {
    27         return id;
    28     }
    29     public void setId(Integer id) {
    30         this.id = id;
    31     }
    32     public String getUsername() {
    33         return username;
    34     }
    35     public void setUsername(String username) {
    36         this.username = username;
    37     }
    38     public String getSex() {
    39         return sex;
    40     }
    41     public void setSex(String sex) {
    42         this.sex = sex;
    43     }
    44     public Date getBirthday() {
    45         return birthday;
    46     }
    47     public void setBirthday(Date birthday) {
    48         this.birthday = birthday;
    49     }
    50     public String getAddress() {
    51         return address;
    52     }
    53     public void setAddress(String address) {
    54         this.address = address;
    55     }
    56     @Override
    57     public String toString() {
    58         return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
    59                 + address + ", orderList=" + orderList + "]";
    60     }
    61 }
    user
     1 package cn.mybatis.pojo;
     2 
     3 import java.io.Serializable;
     4 import java.util.Date;
     5 
     6 public class Orders  implements Serializable{
     7     /**
     8      * 
     9      */
    10     private static final long serialVersionUID = 1L;
    11 
    12     private Integer id;
    13 
    14     private Integer userId;
    15 
    16     private String number;
    17 
    18     private Date createtime;
    19 
    20     private String note;
    21     
    22     private User user;
    23     
    24     @Override
    25     public String toString() {
    26         return "Orders [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
    27                 + ", note=" + note + ", user=" + user + "]";
    28     }
    29 
    30     public User getUser() {
    31         return user;
    32     }
    33 
    34     public void setUser(User user) {
    35         this.user = user;
    36     }
    37 
    38     public Integer getId() {
    39         return id;
    40     }
    41 
    42     public void setId(Integer id) {
    43         this.id = id;
    44     }
    45 
    46     public Integer getUserId() {
    47         return userId;
    48     }
    49 
    50     public void setUserId(Integer userId) {
    51         this.userId = userId;
    52     }
    53 
    54     public String getNumber() {
    55         return number;
    56     }
    57 
    58     public void setNumber(String number) {
    59         this.number = number == null ? null : number.trim();
    60     }
    61 
    62     public Date getCreatetime() {
    63         return createtime;
    64     }
    65 
    66     public void setCreatetime(Date createtime) {
    67         this.createtime = createtime;
    68     }
    69 
    70     public String getNote() {
    71         return note;
    72     }
    73 
    74     public void setNote(String note) {
    75         this.note = note == null ? null : note.trim();
    76     }
    77 
    78     
    79     
    80 }
    orders

      sql映射文件

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="cn.mybatis.mapper.UserMapper" >
     6     <sql id="selectUser">
     7         select * from user
     8     </sql>
     9     <select id="getAllUser" resultType="cn.mybatis.pojo.User">
    10         <include refid="selectUser"/>;
    11     </select>
    12     <select id="multiConditionQuery" resultType="User" parameterType="User">
    13         select * from user
    14         <where>
    15             <if test="id!=null">id=#{id}</if>
    16             <if test="username!=null">And  username like "%"#{username}"%"</if>
    17             <if test="sex!=null">And sex=#{sex}</if>
    18             <if test="address!=null">And address=#{address}</if>
    19         </where>
    20     </select>
    21     <select id="count" resultType="Integer">
    22         select count(*) from user;
    23     </select>
    24     <select id="queryUserByIds" resultType="user" parameterType="UserVo">
    25         select * from user
    26         where 
    27         <foreach collection="ids"  item="id"  open="id in(" separator="," close=")">
    28             #{id}
    29         </foreach>
    30         ;
    31     </select>
    32     <insert id="insert" parameterType="User">
    33         <!-- -->
    34         <selectKey  keyProperty="id" resultType="Integer" order="AFTER">
    35              select LAST_INSERT_ID();
    36         </selectKey>
    37         insert into user
    38         (username,birthday,sex,address)
    39         value(#{username},#{birthday},#{sex},#{address});
    40     </insert>
    41     <delete id="deleteById" parameterType="Integer">
    42         delete from user
    43         where id = #{v}
    44     </delete>
    45     <!-- 多对一 -->
    46     <resultMap type="User" id="selectAllUserAndOrderMap">
    47         <id column="id" property="id"/>
    48         <id column="username" property="username"/>
    49         <id column="address" property="address"/>
    50         <collection property="orderList" javaType="List" ofType="Orders">
    51             <result column="number" property="number"/>
    52             <result column="createtime" property="createtime"/>
    53         </collection>
    54     </resultMap>
    55     <select id="selectAllUserAndOrder" resultMap="selectAllUserAndOrderMap">
    56         select u.id,u.username,u.address,o.number,o.createtime
    57         from user u left join orders o 
    58         on u.id = o.user_id;
    59     </select>
    60     
    61 </mapper>
    UserMapper
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3 PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN"
     4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="cn.mybatis.mapper.OrderMapper" >
     6     <resultMap type="Orders" id="selectAllOrderAndUserMap">
     7         <id  column="id" property="id"/>
     8         <result column="user_id" property="userId"/>
     9         <result column="number" property="number"/>
    10         <result column="createtime" property="createtime"/>
    11         <result column="note" property="note"/>
    12         <association property="user" javaType="User">
    13             <id column="user_id" property="id"/>
    14             <result column="username" property="username"/>
    15             <result column="address" property="address"/>
    16         </association>
    17     </resultMap>
    18     <select id="selectAllOrderAndUser" resultMap="selectAllOrderAndUserMap">
    19         select o.id,o.user_id,o.number,o.createtime,o.note,u.username,u.address
    20         from orders o left join user u 
    21         on o.user_id = u.id;
    22     </select>
    23 </mapper>
    OrderMapper

    Mapper接口

    public interface UserMapper {
        List<User> getAllUser();
        Integer insert(User user);
        Integer deleteById(int i);
        List<User> multiConditionQuery(User user);
        Integer count();
        List<User> queryUserByIds(int[] its);
        List<User> queryUserByIds(UserVo userVo);
        List<User> selectAllUserAndOrder();
    }
    public interface OrderMapper {
        List<Orders> selectAllOrderAndUser();
    }

    测试代码

      1 package cn.mybatis.demo;
      2 
      3 import java.io.IOException;
      4 import java.io.InputStream;
      5 import java.util.Date;
      6 import java.util.List;
      7 
      8 import org.apache.ibatis.io.Resources;
      9 import org.apache.ibatis.session.SqlSession;
     10 import org.apache.ibatis.session.SqlSessionFactory;
     11 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     12 import org.junit.Before;
     13 import org.junit.Test;
     14 
     15 import cn.mybatis.mapper.OrderMapper;
     16 import cn.mybatis.mapper.UserMapper;
     17 import cn.mybatis.pojo.Orders;
     18 import cn.mybatis.pojo.User;
     19 import cn.mybatis.vo.UserVo;
     20 
     21 public class MyBatisDemo {
     22     private SqlSessionFactory sqlSessionFactory;
     23     @Before
     24     public void getSqlSessionFactory() throws IOException {
     25         InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
     26         this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
     27     }
     28     
     29     @Test
     30     public void insertUser() {
     31         SqlSession session = sqlSessionFactory.openSession();
     32         UserMapper userMapper = session.getMapper(UserMapper.class);
     33         User user = new User();
     34         user.setUsername("zjj");
     35         user.setBirthday(new Date());
     36         user.setSex("1");
     37         System.out.println(userMapper.insert(user));
     38         System.out.println(user.getId());
     39         session.commit();
     40     }
     41     
     42     @Test
     43     public void deleteByid() {
     44         SqlSession session = sqlSessionFactory.openSession();
     45         UserMapper userMapper = session.getMapper(UserMapper.class);
     46         System.out.println(userMapper.deleteById(27));
     47         session.commit();
     48     }
     49     
     50     @Test
     51     public  void selectAllUser() throws IOException {
     52         SqlSession session = sqlSessionFactory.openSession();
     53         UserMapper userMapper = session.getMapper(UserMapper.class);
     54         List<User> list = userMapper.getAllUser();
     55         for (User user : list) {
     56             System.out.println(user);
     57         }
     58         session.commit();
     59     }
     60     
     61     @Test
     62     public void multiConditionQuery() {
     63         SqlSession session = sqlSessionFactory.openSession();
     64         UserMapper userMapper = session.getMapper(UserMapper.class);
     65         User user = new User();
     66         user.setAddress("河南郑州");
     67         user.setSex("1");
     68         user.setUsername("明");
     69         List<User> userList = userMapper.multiConditionQuery(user);
     70         for (User user2 : userList) {
     71             System.out.println(user2);
     72         }
     73     }
     74     
     75     @Test
     76     public void Count() {
     77         SqlSession session = sqlSessionFactory.openSession();
     78         UserMapper userMapper = session.getMapper(UserMapper.class);
     79         Integer countNum = userMapper.count();
     80         System.out.println(countNum);
     81         
     82     }
     83     @Test
     84     public void queryUserByIds() {
     85         SqlSession session = sqlSessionFactory.openSession();
     86         UserMapper userMapper = session.getMapper(UserMapper.class);
     87         
     88         /*List<User> userList = userMapper.queryUserByIds(its);*/
     89         UserVo userVo = new UserVo();
     90         userVo.getIds().add(24);
     91         userVo.getIds().add(25);
     92         userVo.getIds().add(26);
     93         List<User> userList = userMapper.queryUserByIds(userVo);
     94         for (User user2 : userList) {
     95             System.out.println(user2);
     96         }
     97     }
     98     @Test
     99     //一对一查询
    100     public void one2One() {
    101         SqlSession session = sqlSessionFactory.openSession();
    102         OrderMapper userMapper = session.getMapper(OrderMapper.class);
    103         List<Orders> orderList = userMapper.selectAllOrderAndUser();
    104         for (Orders order : orderList) {
    105             System.out.println(order);
    106         }
    107     }
    108     @Test
    109     //一对多查询
    110     public void one2many() {
    111         SqlSession session = sqlSessionFactory.openSession();
    112         UserMapper userMapper = session.getMapper(UserMapper.class);
    113         List<User> userList =userMapper.selectAllUserAndOrder();
    114         for (User user2 : userList) {
    115             System.out.println(user2);
    116         }
    117     }
    118 
    119 }
    test

    注意点:

      #{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。

      #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

      ${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,

      ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

      

    <insert id="insert" parameterType="User">
            <!-- selectKey 标签实现主键返回 -->
            <!-- keyColumn:主键对应的表中的哪一列 -->
            <!-- keyProperty:主键对应的pojo中的哪一个属性 -->
            <!-- order:设置在执行insert语句前执行查询id的sql,孩纸在执行insert语句之后执行查询id的sql -->
            <selectKey  keyProperty="id" resultType="Integer" order="AFTER">
                 select LAST_INSERT_ID();
            </selectKey>
            insert into user
            (username,birthday,sex,address)
            value(#{username},#{birthday},#{sex},#{address});
        </insert>

      如果是UUID时order="before"


    SqlMapConfig.xml中配置的内容:        

        properties(属性)

        settings(全局配置参数)

        typeAliases(类型别名)

        typeHandlers(类型处理器)

        objectFactory(对象工厂)

        plugins(插件)

        environments(环境集合属性对象)

            environment(环境子属性对象)

                transactionManager(事务管理)

                dataSource(数据源)

        mappers(映射器)

    自定义别名

    <typeAliases>
        <!-- 单个别名定义 -->
        <typeAlias alias="user" type="cn.itcast.mybatis.pojo.User" />
        <!-- 批量别名定义,扫描整个包下的类,别名为类名(大小写不敏感) -->
        <package name="cn.itcast.mybatis.pojo" />
        <package name="其它包" />
    </typeAliases>

    mappers(映射器)

     <mapper resource=" " />

    使用相对于类路径的资源(现在的使用方式)

    如:<mapper resource="sqlmap/User.xml" />

     <mapper class=" " />

    使用mapper接口类路径

    如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>

    注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

    <package name=""/>

    注册指定包下的所有mapper接口

    如:<package name="cn.itcast.mybatis.mapper"/>

    注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。


    Mybatis整合spring

    整合思想:

      1、SqlSessionFactory对象应该放到spring容器中作为单例存在。

      2、传统dao的开发方式中,应该从spring容器中获得sqlsession对象。

      3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。

      4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     5     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     7     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
     8     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     9     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    10 
    11    <!-- 加载配置文件 -->
    12    <context:property-placeholder location="classpath:db.properties" />
    13 
    14     <!-- 数据库连接池 -->
    15     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    16         destroy-method="close">
    17         <property name="driverClassName" value="${jdbc.driver}" />
    18         <property name="url" value="${jdbc.url}" />
    19         <property name="username" value="${jdbc.username}" />
    20         <property name="password" value="${jdbc.password}" />
    21         <property name="maxActive" value="10" />
    22         <property name="maxIdle" value="5" />
    23     </bean>
    24 
    25     <!-- 配置SqlSessionFactory -->
    26     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    27         <!-- 配置mybatis核心配置文件 -->
    28         <property name="configLocation" value="classpath:SqlMapConfig.xml" />
    29         <!-- 配置数据源 -->
    30         <property name="dataSource" ref="dataSource" />
    31     </bean>
    32 </beans>
    ApplicationContext

    db.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
    jdbc.username=root
    jdbc.password=root

    log4j.properties

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    配置mapper代理

    第一种

    <!-- Mapper代理的方式开发方式一,配置Mapper代理对象 -->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!-- 配置Mapper接口 -->
        <property name="mapperInterface" value="cn.itcast.mybatis.mapper.UserMapper" />
        <!-- 配置sqlSessionFactory -->
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>

    第二种

    <!-- Mapper代理的方式开发方式二,扫描包方式配置代理 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 配置Mapper接口 -->
        <property name="basePackage" value="cn.itcast.mybatis.mapper" />
    </bean>

    Mybatis逆向工程

    github:https://github.com/wcyong/mybatisGeneratorCustom

    修改配置文件

    在generatorConfig.xml中配置Mapper生成的详细信息

    1. 修改要生成的数据库表
    2. pojo文件所在包路径
    3. Mapper所在的包路径
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE generatorConfiguration
     3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
     4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
     5 
     6 <generatorConfiguration>
     7     <context id="testTables" targetRuntime="MyBatis3">
     8         <commentGenerator>
     9             <!-- 是否去除自动生成的注释 true:是 : false:否 -->
    10             <property name="suppressAllComments" value="true" />
    11         </commentGenerator>
    12         <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
    13         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    14             connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="root">
    15         </jdbcConnection>
    16         <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 
    17             userId="yycg" password="yycg"> </jdbcConnection> -->
    18 
    19         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
    20             和 NUMERIC 类型解析为java.math.BigDecimal -->
    21         <javaTypeResolver>
    22             <property name="forceBigDecimals" value="false" />
    23         </javaTypeResolver>
    24 
    25         <!-- targetProject:生成PO类的位置 -->
    26         <javaModelGenerator targetPackage="cn.itcast.ssm.po"
    27             targetProject=".src">
    28             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    29             <property name="enableSubPackages" value="false" />
    30             <!-- 从数据库返回的值被清理前后的空格 -->
    31             <property name="trimStrings" value="true" />
    32         </javaModelGenerator>
    33         <!-- targetProject:mapper映射文件生成的位置 -->
    34         <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper"
    35             targetProject=".src">
    36             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    37             <property name="enableSubPackages" value="false" />
    38         </sqlMapGenerator>
    39         <!-- targetPackage:mapper接口生成的位置 -->
    40         <javaClientGenerator type="XMLMAPPER"
    41             targetPackage="cn.itcast.ssm.mapper" targetProject=".src">
    42             <!-- enableSubPackages:是否让schema作为包的后缀 -->
    43             <property name="enableSubPackages" value="false" />
    44         </javaClientGenerator>
    45         <!-- 指定数据库表 -->
    46         <table schema="" tableName="user"></table>
    47         <table schema="" tableName="order"></table>
    48     </context>
    49 </generatorConfiguration>
    generatorConfig.xml

    注意

    1. 逆向工程生成的代码只能做单表查询

    2. 不能在生成的代码上进行扩展,因为如果数据库变更,需要重新使用逆向工程生成代码,原来编写的代码就被覆盖了。

    3. 一张表会生成4个文件

  • 相关阅读:
    C# 从服务器下载文件
    不能使用联机NuGet 程序包
    NPOI之Excel——合并单元格、设置样式、输入公式
    jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
    UVA 10519 !! Really Strange !!
    UVA 10359 Tiling
    UVA 10940 Throwing cards away II
    UVA 10079 Pizze Cutting
    UVA 763 Fibinary Numbers
    UVA 10229 Modular Fibonacci
  • 原文地址:https://www.cnblogs.com/FlyBlueSky/p/9343294.html
Copyright © 2011-2022 走看看