02_MyBatis项目构造,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

  1. 项目结构(所需jar包,配置文件)

02_MyBatis项目构造,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

02_MyBatis项目构造,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

02_MyBatis项目构造,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

  1. sqlMapConfig.xml的配置内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC"-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

   <!--开启延迟加载 -->

   <settings>

      <!--全局的延迟加载的开关必须要开启 -->

      <settingname="lazyLoadingEnabled"value="true"/>

      <!--积极加载设置成false -->

      <settingname="aggressiveLazyLoading"value="false"/>

      <!--开启二级缓存,缓存中只要是需要配置的针对的都是二级缓存 -->

      <settingname="cacheEnabled"value="true"/>

   </settings>

   

   <typeAliases>

      <!--

          自定义别名:

             type:要定义别名的数据类型

             alias:别名的内容

       -->

       <!--

         非自定义别名:

            jdk中的所用的类的别名直接只用类名即可(不区分大小写)

            如果是基本数据类型的包装类还可以使用基本数据类型的名字

       -->

      <typeAliastype="com.rl.model1.QueryCondition"alias="qc"/>

      <typeAliastype="com.rl.model1.Person"alias="person"/>

   </typeAliases>

   

   <!--数据库的环境的配置 -->

   <environmentsdefault="development">

      <environmentid="development">

          <transactionManagertype="JDBC"/>

          <dataSourcetype="POOLED">

             <propertyname="driver"value="com.mysql.jdbc.Driver"/>

             <propertyname="url"value="jdbc:mysql://localhost:3306/mybatis"/>

             <propertyname="username"value="root"/>

             <propertyname="password"value="123456"/>

          </dataSource>

      </environment>

   </environments>

   

   <!--集中管理表的映射文件 -->

   <mappers>

      <mapperresource="com/rl/mapper/PersonTestMapper.xml"/>

      <mapperresource="com/rl/mapper/PersonMapper.xml"/>

      <mapperresource="com/rl/mapper/RoleMapper.xml"/>

      <mapperresource="com/rl/mapper/OrdersMapper.xml"/>

      <mapperresource="com/rl/mapper/OrderDetailMapper.xml"/>

   </mappers>

</configuration>

  1. sqlMapGenerator.xml的配置如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEgeneratorConfigurationPUBLIC"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

   <!--指定mysql的驱动包的路径,不要放在中文路径下 -->

   <classPathEntrylocation="E:\MyEclipse10\MyBatis\lib\mysql-connector-java-5.0.8-bin.jar"/>

   <!--配置数据源和生成的代码所存放的位置 -->

   <contextid="context1">

      <commentGenerator>

          <!--去除自动生成的注释 -->

          <propertyname="suppressAllComments"value="true"/>

      </commentGenerator>

      

      <jdbcConnection

          driverClass="com.mysql.jdbc.Driver"

          connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis"

          userId="root"

          password="123456"/>

      <!--所生成的实体类的位置默认资源包src -->

      <javaModelGeneratortargetPackage="com.rl.model1"

          targetProject="mybatis0420"/>

      <!--所生成的sqlMap的影射文件的位置,默认资源包src -->

      <sqlMapGeneratortargetPackage="com.rl.mapper"

          targetProject="mybatis0420"/>

 

      <!--为哪些表生成代码 tableName:表名 schema:不用填写,其余属性是禁用例子查询的生成 -->

      <tableschema=""tableName="role"enableCountByExample="false"

          enableUpdateByExample="false"enableDeleteByExample="false"

          enableSelectByExample="false"selectByExampleQueryId="false"/>

          

      <tableschema=""tableName="person_role"enableCountByExample="false"

          enableUpdateByExample="false"enableDeleteByExample="false"

          enableSelectByExample="false"selectByExampleQueryId="false"/>

   </context>

</generatorConfiguration>

  1. log4j.properties的配置内容如下:

log4j.rootLogger=DEBUG,Console

#Console

log4j.appender.Console=org.apache.log4j.ConsoleAppender

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

log4j.appender.Console.layout.ConversionPattern=%d[%t]%-5p[%c]-%m%n

log4j.logger.java.sql.ResultSet=INFO

log4j.logger.org.apache=INFO

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

  1. ehcache.xml的配置内容如下:

<ehcachexmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

 

   <diskStorepath="java.io.tmpdir"/>

   <defaultCache

           maxElementsInMemory="10000"

           eternal="false"

           timeToIdleSeconds="120"

           timeToLiveSeconds="120"

           maxElementsOnDisk="10000000"

           diskExpiryThreadIntervalSeconds="120"

           memoryStoreEvictionPolicy="LRU">

       <persistencestrategy="localTempSwap"/>

   </defaultCache>

</ehcache>

 4  数据库表

创建数据库:create databasemybatis; use mybatis;

订单.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 15:34:20                           */

/*==============================================================*/

 

drop table if exists ORDERS;

 

drop table if exists ORDER_DETAIL;

 

/*==============================================================*/

/* Table: ORDERS                                               */

/*==============================================================*/

create table ORDERS

(

  ORDER_ID            int(10) not null auto_increment,

  PERSON_ID           int(10),

  TOTAL_PRICE         float(10,2),

  ADDR                varchar(50),

  primary key (ORDER_ID)

);

 

/*==============================================================*/

/* Table: ORDER_DETAIL                                         */

/*==============================================================*/

create table ORDER_DETAIL

(

  DETAIL_ID           int(10) not null auto_increment,

  ORDER_ID            int(10),

  PRICE               float(10,2),

  QUANTITY            int(10),

  ITEM_NAME           varchar(10),

  primary key (DETAIL_ID)

);

角色表.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 16:28:01                           */

/*==============================================================*/

 

 

drop table if exists PERSON_ROLE;

 

drop table if exists ROLE;

 

/*==============================================================*/

/* Table: PERSON_ROLE                                          */

/*==============================================================*/

create table PERSON_ROLE

(

  PERSON_ID           int(10),

  ROLE_ID             int(10)

);

 

/*==============================================================*/

/* Table: ROLE                                                 */

/*==============================================================*/

create table ROLE

(

  ROLE_ID             int(10) not null auto_increment,

  ROLE_NAME           varchar(10),

  DESCRIPT            varchar(50),

  primary key (ROLE_ID)

);

人员表.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 9:59:18                            */

/*==============================================================*/

 

 

drop table if exists PERSON;

 

/*==============================================================*/

/* Table: PERSON                                               */

/*==============================================================*/

create table PERSON

(

  PERSON_ID           int(10) not null auto_increment,

  NAME                varchar(10),

  GENDER              varchar(1),

  PERSON_ADDR         varchar(50),

  BIRTHDAY            date,

  primary key (PERSON_ID)

);

人员测试表.sql

/*==============================================================*/

/* DBMS name:     MySQL 5.0                                   */

/* Created on:    2014/8/7 9:15:56                            */

/*==============================================================*/

 

 

drop table if exists PERSON_TEST;

 

/*==============================================================*/

/* Table: PERSON_TEST                                          */

/*==============================================================*/

create table PERSON_TEST

(

  ID                  int(10) not null auto_increment,

  NAME                varchar(10),

  GENDER              varchar(1),

  ADDRESS             varchar(50),

  BIRTHDAY            date,

  primary key (ID)

);

7JavaBean的编写

Person.java

package com.rl.model;

 

import java.util.Date;

publicclass Person implements Serializable{

   private Integerid;

   private Stringname;

   private Stringgender;

   private Stringaddress;

   private Datebirthday;

   

   public Integer getId() {

      returnid;

   }

 

   publicvoid setId(Integer id) {

      this.id = id;

   }

 

   public String getName() {

      returnname;

   }

 

   publicvoid setName(String name) {

      this.name = name;

   }

 

   public String getGender() {

      returngender;

   }

 

   publicvoid setGender(String gender) {

      this.gender = gender;

   }

 

   public String getAddress() {

      returnaddress;

   }

 

   publicvoid setAddress(String address) {

      this.address = address;

   }

 

   public DategetBirthday() {

      returnbirthday;

   }

 

   publicvoid setBirthday(Date birthday) {

      this.birthday = birthday;

   }

 

   @Override

   public String toString() {

      return"Person [id=" +id +", name=" +name +", gender=" +gender

             + ", address=" +address +", birthday=" +birthday +"]";

   }

}

OrderDetail.java

package com.rl.model1;

 

publicclass OrderDetail {

   private IntegerdetailId;

   private IntegerorderId;

   private Floatprice;

   private Integerquantity;

   private StringitemName;

 

   public Integer getDetailId() {

       returndetailId;

   }

 

   publicvoid setDetailId(Integer detailId) {

       this.detailId = detailId;

   }

 

   public Integer getOrderId() {

       returnorderId;

   }

 

   publicvoid setOrderId(Integer orderId) {

       this.orderId = orderId;

   }

 

   public Float getPrice() {

       returnprice;

   }

 

   publicvoid setPrice(Float price) {

       this.price = price;

   }

 

   public Integer getQuantity() {

       returnquantity;

   }

 

   publicvoid setQuantity(Integer quantity) {

       this.quantity = quantity;

   }

 

   public String getItemName() {

       returnitemName;

   }

 

   publicvoid setItemName(String itemName) {

       this.itemName = itemName;

   }

}

Orders.java

package com.rl.model1;

 

import java.util.List;

publicclass Orders {

   private IntegerorderId;

   private IntegerpersonId;

   private FloattotalPrice;

   private Stringaddr;

   private List<OrderDetail>detailList;

   private Personperson;

   

   public Person getPerson() {

      returnperson;

   }

 

   publicvoid setPerson(Person person) {

      this.person = person;

   }

 

   public List<OrderDetail> getDetailList() {

      returndetailList;

   }

 

   publicvoid setDetailList(List<OrderDetail> detailList) {

      this.detailList = detailList;

   }

 

   public Integer getOrderId() {

       returnorderId;

   }

 

   publicvoid setOrderId(Integer orderId) {

       this.orderId = orderId;

   }

 

   public Integer getPersonId() {

       returnpersonId;

   }

 

   publicvoid setPersonId(Integer personId) {

       this.personId = personId;

   }

 

   public Float getTotalPrice() {

       returntotalPrice;

   }

 

   publicvoid setTotalPrice(Float totalPrice) {

       this.totalPrice = totalPrice;

   }

 

   public String getAddr() {

       returnaddr;

   }

 

   publicvoid setAddr(String addr) {

       this.addr = addr;

   }

}

Person.java

package com.rl.model1;

 

import java.io.Serializable;

import java.util.Date;

import java.util.List;

 

import javax.management.relation.Role;

 

/**

 *做二级缓存的时候需要实现Serializable

 */

public class Person implements Serializable {

        private static final long serialVersionUID = 7728191033619971201L;

        private Integer personId;

        private String name;

        private String gender;

        private String personAddr;     

        private Date birthday;    

        private List<Orders> ordersList;    

        private List<Role> roleList;

        

        public List<Role> getRoleList() {

                  return roleList;

        }

 

        public void setRoleList(List<Role> roleList) {

                  this.roleList = roleList;

        }

 

        public List<Orders> getOrdersList() {

                  return ordersList;

        }

 

        public void setOrdersList(List<Orders> ordersList) {

                  this.ordersList = ordersList;

        }

 

        public Integer getPersonId() {

                  return personId;

        }

 

        public void setPersonId(Integer personId) {

                  this.personId = personId;

        }

 

        public String getName() {

                  return name;

        }

 

        public void setName(String name) {

                  this.name = name;

        }

 

        public String getGender() {

                  return gender;

        }

 

        public void setGender(String gender) {

                  this.gender = gender;

        }

 

        public String getPersonAddr() {

                  return personAddr;

        }

 

        public void setPersonAddr(String personAddr) {

                  this.personAddr = personAddr;

        }

 

        public Date getBirthday() {

                  return birthday;

        }

 

        public void setBirthday(Date birthday) {

                  this.birthday = birthday;

        }

 

        @Override

        public String toString() {

                  return "Person [personId=" + personId + ", name=" + name + ", gender="

                                    + gender + ", personAddr=" + personAddr + ", birthday="

                                    + birthday + "]";

        }

}

PersonRole.java

package com.rl.model1;

 

publicclassPersonRole {

   private IntegerpersonId;

 

   private IntegerroleId;

 

   public Integer getPersonId() {

       returnpersonId;

   }

 

   publicvoid setPersonId(Integer personId) {

       this.personId = personId;

   }

 

   public Integer getRoleId() {

       returnroleId;

   }

 

   publicvoid setRoleId(Integer roleId) {

       this.roleId = roleId;

   }

}

QueryCondition.java

package com.rl.model1;

 

import java.util.Date;

 

publicclassQueryCondition {

  private Stringname;

  private Stringgender;

  private Datebirthday;

  

  public String getName() {

     returnname;

  }

 

  publicvoid setName(String name) {

     this.name = name;

  }

 

  public String getGender() {

     returngender;

  }

 

  publicvoid setGender(String gender) {

     this.gender = gender;

  }

 

  public Date getBirthday() {

     returnbirthday;

  }

 

  publicvoid setBirthday(Date birthday) {

     this.birthday = birthday;

  }

}

Role.java

package com.rl.model1;

 

import java.util.List;

 

publicclass Role {

   private IntegerroleId;

   private StringroleName;

   private Stringdescript;

   private List<Person>personList;

   

   public List<Person> getPersonList() {

     returnpersonList;

  }

 

  publicvoid setPersonList(List<Person> personList) {

     this.personList = personList;

  }

 

  public Integer getRoleId() {

       returnroleId;

   }

 

   publicvoid setRoleId(Integer roleId) {

       this.roleId = roleId;

   }

 

   public String getRoleName() {

       returnroleName;

   }

 

   publicvoid setRoleName(String roleName) {

       this.roleName = roleName;

   }

 

   public String getDescript() {

       returndescript;

   }

 

   publicvoid setDescript(String descript) {

       this.descript = descript;

   }

}

SqlHelper.java

package com.rl.util;

 

import java.util.Date;

import java.util.Map;

 

import org.apache.ibatis.jdbc.SqlBuilder;

 

public class SqlHelper {

        

        public String getSql(Map<String,Object> map) {

                  //获得所有可能传递过来的参数

                  String name = (String) map.get("name");

                  String gender = (String) map.get("gender");

                  String personAddr = (String) map.get("personAddr");

                  Date birthday = (Date) map.get("birthday");

                  

                  SqlBuilder.BEGIN();

                  //指定所有的列

                  SqlBuilder.SELECT("*");

                  SqlBuilder.FROM("person");

                  if(name != null){

                           //SqlBuilder中不支持${}

                           SqlBuilder.WHERE("name like '%"+name+"%'");

                  }

                  if(gender != null){

                           SqlBuilder.WHERE("gender = #{gender}");

                  }

                  if(personAddr != null){

                           //SqlBuilder中不支持${}

                           SqlBuilder.WHERE("person_addr like '%"+personAddr+"%'");

                 }

                  if(birthday != null){

                           SqlBuilder.WHERE("birthday < #{birthday}");

                  }

                  

                  return SqlBuilder.SQL();

        }

}