项目结构(所需jar包,配置文件)
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>
<!--全局的延迟加载的开关必须要开启 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!--积极加载设置成false -->
<setting name="aggressiveLazyLoading" value="false"/>
<!--开启二级缓存,缓存中只要是需要配置的针对的都是二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
<!--
自定义别名:
type:要定义别名的数据类型
alias:别名的内容
-->
<!--
非自定义别名:
在jdk中的所用的类的别名直接只用类名即可(不区分大小写)
如果是基本数据类型的包装类还可以使用基本数据类型的名字
-->
<typeAlias type="com.rl.model1.QueryCondition" alias="qc"/>
<typeAlias type="com.rl.model1.Person" alias="person"/>
</typeAliases>
<!--数据库的环境的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="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>
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>
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
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();
}
}