代码改变世界

mybatis

2018-11-20 23:54  crow!  阅读(269)  评论(0编辑  收藏  举报

数据库创建脚本

DROP DATABASE IF EXISTS mldn ;

CREATE DATABASE mldn CHARACTER SET UTF8 ;

USE mldn ;

CREATE TABLE member (
    mid    VARCHAR(50) ,
    name   VARCHAR(50) ,
    age    INT ,
    birthday  DATE ,
    salary    DOUBLE ,
    CONSTRAINT pk_mid PRIMARY KEY (mid)
);


CREATE TABLE news (
    nid       INT AUTO_INCREMENT ,
    title     VARCHAR(50) ,
    pub_date    DATETIME ,
    CONSTRAINT pk_nid PRIMARY KEY (nid)
);

DROP TABLE member_details ;
DROP TABLE member_login ;

CREATE TABLE member_login(
    mid    VARCHAR(50) ,
    password   VARCHAR(50) ,
    CONSTRAINT pk_mid PRIMARY KEY (mid)
) ;

CREATE TABLE member_details (
    mid    VARCHAR(50) ,
    name   VARCHAR(50) ,
    age    INT ,
    CONSTRAINT pk_mid2 PRIMARY KEY (mid) ,
    CONSTRAINT fk_mid  FOREIGN KEY(mid) REFERENCES member_login(mid) ON DELETE CASCADE 
) ;

--识别器表
DROP TABLE member;
CREATE TABLE member (
    mid       VARCHAR(50)  ,
    name      VARCHAR(50)  ,
    age       INT          ,
    school    VARCHAR(50)  ,
    score     DOUBLE       ,
    company   VARCHAR(50)  ,
    salary    DOUBLE       ,
    flag      VARCHAR(50)  ,
    CONSTRAINT pk_mid PRIMARY KEY (mid)
);

--一对多
CREATE TABLE type(
    tid        INT AUTO_INCREMENT ,
    title      VARCHAR(50) ,
    CONSTRAINT pk_tid PRIMARY KEY (tid)
) ;

CREATE TABLE subtype (
    stid    INT AUTO_INCREMENT ,
    title   VARCHAR(50) ,
    tid     INT ,
    CONSTRAINT pk_stid PRIMARY KEY (stid) ,
    CONSTRAINT fk_tid  FOREIGN KEY(tid) REFERENCES type(tid) ON DELETE CASCADE 
) ;

INSERT INTO type(title) VALUES('电脑办公') ;
INSERT INTO subtype(title,tid) VALUES('笔记本电脑',1);
INSERT INTO subtype(title,tid) VALUES('内存',1);
INSERT INTO subtype(title,tid) VALUES('硬盘',1);

--many to many
CREATE TABLE role(
    rid        INT AUTO_INCREMENT ,
    title      VARCHAR(50) ,
    CONSTRAINT pk_rid PRIMARY KEY (rid)
) ;

CREATE TABLE groups (
    gid     INT AUTO_INCREMENT ,
    title   VARCHAR(50) ,
    CONSTRAINT pk_gid PRIMARY KEY (gid) 
) ;

CREATE TABLE role_groups (
    rid      INT ,
    gid      INT ,
    CONSTRAINT fk_rid FOREIGN KEY(rid) REFERENCES role(rid) ON DELETE CASCADE ,
    CONSTRAINT fk_gid FOREIGN KEY(gid) REFERENCES groups(gid) ON DELETE CASCADE 
);

INSERT INTO role(title) VALUES('超级管理员');
INSERT INTO groups(title) VALUES('人事管理');
INSERT INTO groups(title) VALUES('任务管理');
INSERT INTO groups(title) VALUES('商品采购');
INSERT INTO groups(title) VALUES('商品检修');
INSERT INTO groups(title) VALUES('后请保障');
INSERT INTO groups(title) VALUES('财务管理');
INSERT INTO role_groups(rid,gid) VALUES(1,1);
INSERT INTO role_groups(rid,gid) VALUES(1,2);

mybatis的配置文件 :mybatis.cfg.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>
    <settings>
        <!-- 启用二级缓存配置 -->
        <setting name="cacheEnabled" value="true" />
    </settings>
    <typeAliases>
        <typeAlias type="cn.mldn.pojo.Member"  alias="Member" />
        <typeAlias type="cn.mldn.pojo.Student" alias="Student"/>
        <typeAlias type="cn.mldn.pojo.Worker"  alias="Worker" />
    
        <typeAlias type="cn.mldn.vo.News" alias="News"/>
        
        <typeAlias type="cn.mldn.vo.MemberLogin" alias="MemberLogin"/>
        <typeAlias type="cn.mldn.vo.MemberDetails" alias="MemberDetails"/>
        
        <typeAlias type="cn.mldn.vo.Type" alias="Type"/>
        <typeAlias type="cn.mldn.vo.Subtype" alias="Subtype"/>
        
        <typeAlias type="cn.mldn.vo.Role" alias="Role"/>
        <typeAlias type="cn.mldn.vo.Groups" alias="Groups"/>
        <typeAlias type="cn.mldn.vo.RoleGroupsLink" alias="RoleGroupsLink"/>
    </typeAliases>
    <environments default="development">
        <environment id="development" >
            <transactionManager type="jdbc"/>
            <dataSource type="POOLED">
                <property name="driver" value="org.gjt.mm.mysql.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.42.3:3306/mldn"/>
                <property name="username" value="root"/>
                <property name="password" value="mysqladmin"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="cn/mldn/vo/mapping/News.xml"/>
        
        <mapper resource="cn/mldn/pojo/mapping/Member.xml"/>
        
        <mapper resource="cn/mldn/vo/mapping/MemberLogin.xml"/>
        <mapper resource="cn/mldn/vo/mapping/MemberDetails.xml"/>
        
        <mapper resource="cn/mldn/vo/mapping/Type.xml"/>
        <mapper resource="cn/mldn/vo/mapping/Subtype.xml"/>
        
        <mapper resource="cn/mldn/vo/mapping/Role.xml"/>
        <mapper resource="cn/mldn/vo/mapping/Groups.xml"/>
    </mappers>
</configuration>

member.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.mldn.mapping.MemberNS">
    
    <insert id="doCreate" parameterType="cn.mldn.vo.Member">
        INSERT INTO member (mid,name,age,birthday,salary) VALUES (#{mid},#{name},#{age},#{birthday},#{salary}) 
    </insert>
</mapper>

Groups.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.mldn.mapping.GroupsNS">
    
    <resultMap type="Groups" id="GroupsResultMap">
        <id property="gid" column="gid" />
        <result property="title" column="title" />
        <collection property="allRoles" javaType="java.util.List"
        ofType="Role"  />
    </resultMap>
    <!-- 根据角色查询出对应的所有权限组的数据 -->
    <select id="findAllByRole" parameterType="int" resultMap="GroupsResultMap" >
        SELECT gid, title FROM groups 
        WHERE gid IN (
            SELECT gid FROM role_groups WHERE rid=#{prid}
        )
    </select>
</mapper>

MemberDetails.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.mldn.mapping.MemberDetailsNS">
    <resultMap type="MemberDetails" id="MemberDetailsResultMap">
        <id property="mid" column="mid" />
        <result property="name" column="name" />
        <result property="age" column="age" />

    </resultMap>
    <insert id="doCreate" parameterType="MemberDetails">
        INSERT INTO member_details (mid,name,age) VALUES (#{mid},#{name},#{age}) ;
    </insert>
    
    <select id="findById" parameterType="String" resultMap="MemberDetailsResultMap">
        SELECT mid,name,age FROM member_details WHERE mid=#{pmid} ;
    </select>
</mapper>

MemberLogin.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.mldn.mapping.MemberLoginNS">
    
    <resultMap type="MemberLogin" id="MemberLoginResultMap">
        <id property="mid" column="mid" />
        <result property="password" column="password" />
        <!-- 这个级联操作发生在数据查询的时候进行,表示查询返回的是 MemberLoginResultMap时,执行级联-->
        <association property="details" javaType="MemberDetails" column="mid" 
        select="cn.mldn.mapping.MemberDetailsNS.findById"/>
    </resultMap>
    
    <insert id="doCreate" parameterType="MemberLogin">
        INSERT INTO member_login (mid,password) VALUES (#{mid},#{password}) ;
    </insert>
    
    <select id="findById" parameterType="String" resultMap="MemberLoginResultMap">
        SELECT mid,password FROM member_login WHERE mid=#{pmid} ;
    </select>
</mapper>

News.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.mldn.mapping.NewsNS" >
<!-- 
    eviction 实现缓存的策略
        LRU 默认的策略 ,最近最少使用算法 ,将不怎么使用的对象清除
        FIFO 先进先出 ,删除缓存对象中较早的对象
        SOFT ;软引用 依靠java中的GC处理;
        WEAK  弱引用,依靠java中的GC处理
    readOnly 对于缓存的配置一定不要进行同步,否则新能太差了
    size : 缓存的大小 ,默认是1024
 -->
    <cache eviction="FIFO" flushInterval="10000" readOnly="true" size="512"/>
    <resultMap type="News" id="NewsResultMap">
        <id property="nid" column="nid"/>
        <result property="title" column="title"/>
        <result property="pubdate" column="pub_date"/>
    </resultMap>
    <select id="findAllCountSplit" resultType="int" parameterType="java.util.Map">
        SELECT COUNT(*) FROM news 
        WHERE ${column} LIKE #{keyWord} ;
    </select>
    <select id="getAllCount" resultType="int">
        SELECT COUNT(*) FROM news ;
    </select>
    <select id="findAll"  resultMap="NewsResultMap">
        SELECT nid,title,pub_date FROM news ;
    </select>
    <select id="findAllSplit" resultMap="NewsResultMap" parameterType="java.util.Map">
        SELECT nid,title,pub_date FROM news 
        WHERE ${column} LIKE #{keyWord} LIMIT #{start},#{lineSize} ;
    </select>
    <select id="findById" parameterType="int" resultMap="NewsResultMap" useCache="false">
        SELECT nid,title,pub_date FROM news WHERE nid=#{asdf} ;
    </select>
    
    <insert id="doCreate" parameterType="News" keyProperty="nid" useGeneratedKeys="true">
        INSERT INTO news (title,pub_date) VALUES (#{title},#{pubdate}) ;
    </insert>
    
    <update id="doUpdate" parameterType="News" >
        UPDATE news SET title=#{title} ,pub_date=#{pubdate} WHERE nid=#{nid} ;
    </update>
    
    <delete id="doRemove" parameterType="int">
        DELETE FROM news WHERE nid=#{anid} ;
    </delete>
    
    <select id="findByIdExample" parameterType="int" resultType="News">
        SELECT nid,title,pub_date FROM news WHERE nid=#{asdf} ;
    </select>
    
    <select id="findAllByTitle" parameterType="News" resultMap="NewsResultMap">
        SELECT nid ,title,pub_date FROM news 
        <if test="title != null " >
            WHERE title=#{title}
        </if>
    </select>
    
    <sql id="newsColumn">
        nid,title,pub_date
    </sql>
    <select id="findAllForeach" resultMap="NewsResultMap" parameterType="Integer">
        SELECT <include refid="newsColumn" /> FROM news
        <where>
            nid IN
            <foreach collection="array" open="(" close=")" separator="," item="ele">
                 #{ele}
            </foreach>
        </where>
    </select>
    
    <select id="findAllSplit2" resultMap="NewsResultMap" parameterType="java.util.Map">
        SELECT nid,title,pub_date FROM news 
        <if test="column != null">
            WHERE ${column} LIKE #{keyWord}
        </if>
        LIMIT #{start},#{lineSize} ;
    </select>
    
    <select id="findAllChoose" parameterType="java.util.Map" resultMap="NewsResultMap">
        SELECT nid ,title,pub_date FROM news 
        <where> 
            <choose>
                <when test="column == 'nid'">
                    ${column}=#{nid}
                </when>
                <when test="column == 'title'">
                    ${column}=#{title}
                </when>
            </choose>
        </where>
    </select>
    
    <update id="doUpdateDyn" parameterType="News">
        UPDATE news
        <set>
            <if test="title != null">
                title=#{title} ,
            </if>
            <if test="pubdate != null">
                pub_date=#{pubdate} ,
            </if>
        </set>
        <where>
            <if test="nid != null">
                nid=#{nid}
            </if>
        </where>
    </update>
    
</mapper>

Roles.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.mldn.mapping.RoleNS">
    
    <resultMap type="Role" id="RoleResultMap">
        <id property="rid" column="rid" />
        <result property="title" column="title" />
        <collection property="allGroups"  javaType="java.util.List"
        ofType="Groups"  resultMap="cn.mldn.mapping.GroupsNS.GroupsResultMap"/>
    </resultMap>
    <insert id="doCreate" parameterType="Role" useGeneratedKeys="true" keyProperty="rid">
        INSERT INTO role (title) VALUES (#{title}) ;
    </insert>
    
    <insert id="doCreateRoleGroups" parameterType="RoleGroupsLink" >
        INSERT INTO role_groups(rid,gid) VALUES (#{role.rid},#{groups.gid}) ;
    </insert>
    
    <update id="doUpdate" parameterType="Role">
        UPDATE role SET title=#{title} WHERE rid=#{rid} ;
    </update>
    <delete id="doRemoveRoleGroups" parameterType="int">
        DELETE FROM role_groups WHERE rid=#{prid} ;
    </delete>
</mapper>

Subtype.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.mldn.mapping.SubtypeNS">
    
    <resultMap type="Subtype" id="SubtypeResultMap">
        <id property="stid" column="stid" />
        <result property="title" column="title" />
        <!-- 这个级联操作发生在数据查询的时候进行,表示查询返回的是 MemberLoginResultMap时,执行级联-->
        <association property="type" javaType="Type" column="tid" 
        resultMap="cn.mldn.mapping.TypeNS.TypeResultMap"/>
    </resultMap>
    
    <insert id="doCreate" parameterType="Subtype">
        INSERT INTO subtype (title,tid) VALUES (#{title},#{type.tid}) ;
    </insert>
    
    <select id="findById" parameterType="Integer" resultMap="SubtypeResultMap">
        SELECT stid,title,tid FROM subtype WHERE stid=#{ptid} ;
    </select>
    
    <select id="findAllByType" parameterType="Integer" resultMap="SubtypeResultMap">
        SELECT stid,title,tid FROM subtype WHERE tid=#{ptid} ;
    </select>
</mapper>

Type.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.mldn.mapping.TypeNS">
    
    <resultMap type="Type" id="TypeResultMap">
        <id property="tid" column="tid" />
        <result property="title" column="title" />
        <collection property="subtypes" column="tid" javaType="java.util.List"
        ofType="Subtype"  select="cn.mldn.mapping.SubtypeNS.findAllByType"/>
    </resultMap>
    
    <insert id="doCreate" parameterType="Type">
        INSERT INTO type (title) VALUES (#{title}) ;
    </insert>
    
    <select id="findById" parameterType="Integer" resultMap="TypeResultMap">
        SELECT tid,title FROM type WHERE tid=#{ptid} ;
    </select>
</mapper>

Groups

package cn.mldn.vo;

import java.io.Serializable;
import java.util.List;

@SuppressWarnings("serial")
public class Groups implements Serializable {
    private Integer gid ;
    private String  title ;
    private List<Role> allRoles ;
    public Integer getGid() {
        return gid;
    }
    public void setGid(Integer gid) {
        this.gid = gid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public List<Role> getAllRoles() {
        return allRoles;
    }
    public void setAllRoles(List<Role> allRoles) {
        this.allRoles = allRoles;
    }
    @Override
    public String toString() {
        return "Groups [gid=" + gid + ", title=" + title + "]";
    }
    
}

Member

package cn.mldn.vo;

import java.io.Serializable;
import java.util.Date;

@SuppressWarnings("serial")
public class Member implements Serializable {
    private String mid ;
    private String name ;
    private Integer age ;
    private Date    birthday ;
    private Double  salary ;
    public String getMid() {
        return mid;
    }
    public void setMid(String mid) {
        this.mid = mid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Double getSalary() {
        return salary;
    }
    public void setSalary(Double salary) {
        this.salary = salary;
    }
    
    
}

MemberDetails

package cn.mldn.vo;

import java.io.Serializable;

public class MemberDetails implements Serializable {
    private String mid ;
    private String name ;
    private Integer age ;
    private MemberLogin login ;
    public String getMid() {
        return mid;
    }
    public void setMid(String mid) {
        this.mid = mid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public MemberLogin getLogin() {
        return login;
    }
    public void setLogin(MemberLogin login) {
        this.login = login;
    }
    
}

MemberLogin

package cn.mldn.vo;

import java.io.Serializable;

public class MemberLogin implements Serializable {
    private String mid ;
    private String password ;
    
    private MemberDetails details ;

    public String getMid() {
        return mid;
    }

    public void setMid(String mid) {
        this.mid = mid;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public MemberDetails getDetails() {
        return details;
    }

    public void setDetails(MemberDetails details) {
        this.details = details;
    }
    
    
}

News

package cn.mldn.vo;

import java.io.Serializable;
import java.util.Date;

public class News implements Serializable {
    private Integer nid ;
    private String  title ;
    private Date    pubdate ;
    public Integer getNid() {
        return nid;
    }
    public void setNid(Integer nid) {
        this.nid = nid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Date getPubdate() {
        return pubdate;
    }
    public void setPubdate(Date pubdate) {
        this.pubdate = pubdate;
    }
    @Override
    public String toString() {
        return "News [nid=" + nid + ", title=" + title + ", pubdate=" + pubdate + "]";
    }
    
}

Role

package cn.mldn.vo;

import java.io.Serializable;
import java.util.List;

@SuppressWarnings("serial")
public class Role implements Serializable {
    private Integer rid ;
    private String  title ;
    private List<Groups> allGroups ;
    public Integer getRid() {
        return rid;
    }
    public void setRid(Integer rid) {
        this.rid = rid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public List<Groups> getAllGroups() {
        return allGroups;
    }
    public void setAllGroups(List<Groups> allGroups) {
        this.allGroups = allGroups;
    }
    
}

RoleGroupsLink

package cn.mldn.vo;

import java.io.Serializable;

@SuppressWarnings("serial")
public class RoleGroupsLink implements Serializable {
    private Role role ;
    private Groups groups ;
    public Role getRole() {
        return role;
    }
    public void setRole(Role role) {
        this.role = role;
    }
    public Groups getGroups() {
        return groups;
    }
    public void setGroups(Groups groups) {
        this.groups = groups;
    }
    
}

Subtype

package cn.mldn.vo;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Subtype implements Serializable {
    private Integer stid ;
    private String  title;
    private Type    type ;
    public Integer getStid() {
        return stid;
    }
    public void setStid(Integer stid) {
        this.stid = stid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Type getType() {
        return type;
    }
    public void setType(Type type) {
        this.type = type;
    }
    @Override
    public String toString() {
        return "Subtype [stid=" + stid + ", title=" + title + ", type=" + type + "]";
    }
    
}

Type

package cn.mldn.vo;

import java.io.Serializable;
import java.util.List;

@SuppressWarnings("serial")
public class Type implements Serializable {
    private Integer tid ;
    private String  title ;
    private List<Subtype> subtypes ;
    public Integer getTid() {
        return tid;
    }
    public void setTid(Integer tid) {
        this.tid = tid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public List<Subtype> getSubtypes() {
        return subtypes;
    }
    public void setSubtypes(List<Subtype> subtypes) {
        this.subtypes = subtypes;
    }
    @Override
    public String toString() {
        return "Type [tid=" + tid + ", title=" + title + ", subtypes=" + subtypes + "]";
    }
    
    
}

插入一行数据

package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.vo.Member;

public class TestInsertDemo {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        
        InputStream input = Resources.getResourceAsStream("mybatis.cfg.xml");
        
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
        
        SqlSession session = factory.openSession() ;
        
        Member vo = new Member();
        
        vo.setMid("mldn-1");
        vo.setAge(15);
        vo.setName("xiao wang");
        vo.setBirthday(new Date());
        vo.setSalary(1.12);
        
        int len = session.insert("cn.mldn.mapping.MemberNS.doCreate",vo);
        System.out.println("影响的数据行数" + len );
        
        session.commit();
        session.close();
        input.close();
        
    }

}

使用工厂

package cn.mldn.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.TransactionIsolationLevel;

public class MyBatisSessionFactory {
    private static final String CONFIG_FILE = "mybatis.cfg.xml" ;
    private static final ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    
    private static SqlSessionFactory  factory = null;
    private static InputStream input = null ;
    
    static {
        rebuildSessionFactory();
    }
    
    /**
     * 
     * @return
     */
    public static SqlSession getSession() {
        SqlSession  session = threadLocal.get();
        if (session == null) {
            if (factory == null) {
                rebuildSessionFactory();
            }
            session = factory.openSession();
            threadLocal.set(session);
        }
        return session;
    }
    
    public static SqlSessionFactory getSessionFactory() {
        return factory;
    }
    
    public static void rebuildSessionFactory() {
        try {
            input = Resources.getResourceAsStream(CONFIG_FILE);
            factory = new SqlSessionFactoryBuilder().build(input);
            factory.getConfiguration().addMappers("cn.mldn.dao");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void close() {
        SqlSession  session = threadLocal.get();
        threadLocal.set(null);
        if(session != null) {
            session.close();
            if(input != null){
                try {
                    input.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
    }
}
package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;

public class TestInsertDemo2 {

    public static void main(String[] args) throws Exception{

        
        Member vo = new Member();
        
        vo.setMid("mldn-30");
        vo.setAge(15);
        vo.setName("xiao wang");
        vo.setBirthday(new Date());
        vo.setSalary(1.12);
        
        int len = MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.MemberNS.doCreate",vo);
        System.out.println("影响的数据行数" + len );
         MyBatisSessionFactory.getSession().commit();
         MyBatisSessionFactory.close();

        
    }

}

各种操作

package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsCountAll {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub

        Integer  count = MyBatisSessionFactory.getSession().selectOne("cn.mldn.mapping.NewsNS.getAllCount");
        System.out.println( count );
        
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsDeleteDemo {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        
        
        int len = MyBatisSessionFactory.getSession().delete("cn.mldn.mapping.NewsNS.doRemove",1);
        System.out.println("影响的数据行数 :" + len  );
        
         MyBatisSessionFactory.getSession().commit();
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.test;

import java.io.InputStream;
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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsFindAll {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub

        List vo = MyBatisSessionFactory.getSession().selectList("cn.mldn.mapping.NewsNS.findAll");
        System.out.println( vo );
        
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsFindById {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub

        News vo = MyBatisSessionFactory.getSession().selectOne("cn.mldn.mapping.NewsNS.findById",2);
        System.out.println( vo );
        
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsFindSplit {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        String column  = "title" ;
        String keyWord = "%%" ;
        
        int currentPage = 1;
        int lineSize = 5 ;
        
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("column", column);
        map.put("keyWord", keyWord);
        map.put("start", (currentPage-1) * lineSize);
        map.put("lineSize", lineSize);
        
        List vo = MyBatisSessionFactory.getSession().selectList("cn.mldn.mapping.NewsNS.findAllSplit",map);
        System.out.println( vo );
        
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsGetSplitCount {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        String column  = "title" ;
        String keyWord = "%%" ;
        
        int currentPage = 1;
        int lineSize = 5 ;
        
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("column", column);
        map.put("keyWord", keyWord);
//        map.put("start", (currentPage-1) * lineSize);
//        map.put("lineSize", lineSize);
        
        Integer vo = MyBatisSessionFactory.getSession().selectOne("cn.mldn.mapping.NewsNS.findAllCountSplit",map);
        System.out.println( vo );
        
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsInsertDemo {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        
        News vo = new News();
        
        vo.setTitle("jintian fangjia ");
        vo.setPubdate(new Date());
        
        int len = MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.NewsNS.doCreate",vo);
        System.out.println("影响的数据行数 :" + len + ", nid=" + vo.getNid() );
        
         MyBatisSessionFactory.getSession().commit();
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.test;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsUpdateDemo {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        
        News vo = new News();
        
        vo.setNid(2);
        vo.setTitle("请客吃饭! ");
        vo.setPubdate(new Date());
        
        int len = MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.NewsNS.doUpdate",vo);
        System.out.println("影响的数据行数 :" + len + ", nid=" + vo.getNid() );
        
         MyBatisSessionFactory.getSession().commit();
         MyBatisSessionFactory.close();

        
    }

}

多对多

package cn.mldn.testManytoMany;

import java.util.ArrayList;
import java.util.List;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Groups;
import cn.mldn.vo.Role;
import cn.mldn.vo.RoleGroupsLink;

public class TestRoleAdd {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int gids [] = new int [] {2,4,6} ;
        Role role = new Role() ;
        role.setTitle("后请大妈");
        if(MyBatisSessionFactory.getSession().insert(
                "cn.mldn.mapping.RoleNS.doCreate",role)>0){
//            List<RoleGroupsLink> allLinks = new ArrayList<RoleGroupsLink> ();
            for (int x = 0 ; x < gids.length ; x++) {
                Groups g  = new Groups() ;
                g.setGid(gids[x]);
                RoleGroupsLink rgl = new RoleGroupsLink();
                rgl.setRole(role);
                rgl.setGroups(g);
//                allLinks.add(rgl);
                System.out.println(MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.RoleNS.doCreateRoleGroups",rgl));
            }
        }

        MyBatisSessionFactory.getSession().commit();
        MyBatisSessionFactory.close();
    }

}
package cn.mldn.testManytoMany;

import java.util.ArrayList;
import java.util.List;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Groups;
import cn.mldn.vo.Role;
import cn.mldn.vo.RoleGroupsLink;

public class TestRoleEdit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int gids [] = new int [] {1,3,5} ;
        Role role = new Role() ;
        role.setRid(2);
        role.setTitle("后请服务");
        if(MyBatisSessionFactory.getSession().update(
                "cn.mldn.mapping.RoleNS.doUpdate",role)>0){
            //先删除,我们已有的角色权限关系
            if(MyBatisSessionFactory.getSession().update(
                    "cn.mldn.mapping.RoleNS.doRemoveRoleGroups",role.getRid())>0) {
                for (int x = 0 ; x < gids.length ; x++) {
                    Groups g  = new Groups() ;
                    g.setGid(gids[x]);
                    RoleGroupsLink rgl = new RoleGroupsLink();
                    rgl.setRole(role);
                    rgl.setGroups(g);
                    System.out.println(MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.RoleNS.doCreateRoleGroups",rgl));
                }
            }
        }

        MyBatisSessionFactory.getSession().commit();
        MyBatisSessionFactory.close();
    }

}
package cn.mldn.testManytoMany;

import java.util.ArrayList;
import java.util.List;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Groups;
import cn.mldn.vo.Role;
import cn.mldn.vo.RoleGroupsLink;

public class TestRoleGet {

    public static void main(String[] args) {
        List<Groups> all = MyBatisSessionFactory.getSession().selectList("cn.mldn.mapping.GroupsNS.findAllByRole",2);
        System.out.println(all);
    }

}

一对多

package cn.mldn.testOneByMany;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Subtype;
import cn.mldn.vo.Type;

public class TestSubtypeAdd {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Type vo = new Type() ;
        vo.setTid(1);
        
        Subtype sub = new Subtype() ;
        sub.setType(vo);
        sub.setTitle("U盘");
        
        MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.SubtypeNS.doCreate", sub) ;
        MyBatisSessionFactory.getSession().commit();
        MyBatisSessionFactory.close();
    }

}
package cn.mldn.testOneByMany;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Subtype;
import cn.mldn.vo.Type;

public class TestSubtypeGet {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Subtype vo = MyBatisSessionFactory.getSession().selectOne("cn.mldn.mapping.SubtypeNS.findById", 1) ;
//        System.out.println(vo.getType().getTid());
//        System.out.println(vo);
        MyBatisSessionFactory.close();
    }

}
package cn.mldn.testOneByMany;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Type;

public class TestTypeAdd {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Type vo = new Type() ;
        
        vo.setTitle("家居生活");
        
        MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.TypeNS.doCreate", vo) ;
        MyBatisSessionFactory.getSession().commit();
        MyBatisSessionFactory.close();
    }

}
package cn.mldn.testOneByMany;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Type;

public class TestTypeGet {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Type vo = MyBatisSessionFactory.getSession().selectOne("cn.mldn.mapping.TypeNS.findById", 1) ;
//        System.out.println(vo);
        MyBatisSessionFactory.close();
    }

}

一对一

package cn.mldn.testOneByOne;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.MemberDetails;
import cn.mldn.vo.MemberLogin;

public class TestMemberAdd {
    public static void main(String[] args) {
        MemberLogin login = new MemberLogin() ;
        login.setMid("mldn - hello");
        login.setPassword("www.mldn.cn");
        
        MemberDetails details = new MemberDetails() ;
        details.setMid("mldn - hello");
        details.setName("xiao tain");
        details.setAge(24);
        
        System.out.println(MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.MemberLoginNS.doCreate",login));
        System.out.println(MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.MemberDetailsNS.doCreate",details));
        MyBatisSessionFactory.getSession().commit();
        MyBatisSessionFactory.close();
        
    }
}
package cn.mldn.testOneByOne;

import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.MemberDetails;
import cn.mldn.vo.MemberLogin;

public class TestMemberLoginGet {
    public static void main(String[] args) {
        MemberLogin login = MyBatisSessionFactory.getSession().selectOne("cn.mldn.mapping.MemberLoginNS.findById","mldn - hello");

        System.out.println(login);
        MyBatisSessionFactory.close();
        
    }
}

Pojo 同一表中的不同角色

Member.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.mldn.mapping.MemberNS">
    <resultMap type="Member" id="MemberResultMap">
        <id property="mid" column="mid"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <discriminator javaType="String" column="flag">
            <case value="学生" resultType="Student">
                <result property="score" column="score"/>
                <result property="school" column="school"/>
            </case>
            <case value="工人" resultType="Worker">
                <result property="salary" column="salary"/>
                <result property="company" column="company"/>
            </case>
        </discriminator>
    </resultMap>
        <insert id="doCreateStudent" parameterType="Student">
            INSERT INTO member (mid,name,age,flag,school,score) VALUES (#{mid},#{name},#{age},'学生',#{school},#{score}) ;
        </insert>
        <insert id="doCreateWorker" parameterType="Worker">
            INSERT INTO member (mid,name,age,flag,company,salary) VALUES (#{mid},#{name},#{age},'工人',#{company},#{salary}) ;
        </insert>
        <select id="findByStudentId" parameterType="String" resultMap="MemberResultMap" >
            SELECT mid,name,age,flag,school,score FROM member WHERE mid=#{pid} AND flag='学生' ;
        </select>
        <select id="findByWorkerId" parameterType="String" resultMap="MemberResultMap" >
            SELECT mid,name,age,flag,company,salary FROM member WHERE mid=#{pid} AND flag='工人' ;
        </select>

</mapper>
package cn.mldn.pojo;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Member implements Serializable {
    private String  mid  ;
    private String  name ;
    private Integer age  ;
    private String  flag ;
    public String getMid() {
        return mid;
    }
    public void setMid(String mid) {
        this.mid = mid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getFlag() {
        return flag;
    }
    public void setFlag(String flag) {
        this.flag = flag;
    }
}
package cn.mldn.pojo;

@SuppressWarnings("serial")
public class Student extends Member {
    private String school ;
    private Double score  ;
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
    public Double getScore() {
        return score;
    }
    public void setScore(Double score) {
        this.score = score;
    }
    
}
package cn.mldn.pojo;

@SuppressWarnings("serial")
public class Worker extends Member {
    private String company ;
    private Double salary  ;
    public String getCompany() {
        return company;
    }
    public void setCompany(String company) {
        this.company = company;
    }
    public Double getSalary() {
        return salary;
    }
    public void setSalary(Double salary) {
        this.salary = salary;
    }
}

测试pojo

package cn.mldn.pojo.test;

import cn.mldn.pojo.Student;
import cn.mldn.util.MyBatisSessionFactory;

public class TestStudentAdd {

    public static void main(String[] args) {
        Student stu = new Student();
        
        stu.setMid("mldn-stu");
        stu.setName("瞌睡田");
        stu.setAge(18);
        stu.setSchool("MLDN");
        stu.setScore(80.0);
        
        System.out.println(MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.MemberNS.doCreateStudent",stu));
        MyBatisSessionFactory.getSession().commit();
        MyBatisSessionFactory.close();
    }

}
package cn.mldn.pojo.test;

import cn.mldn.pojo.Student;
import cn.mldn.util.MyBatisSessionFactory;

public class TestStudentGet {

    public static void main(String[] args) {
//        Student stu = new Student();
//        
//        stu.setMid("mldn-stu");
//        stu.setName("瞌睡田");
//        stu.setAge(18);
//        stu.setSchool("MLDN");
//        stu.setScore(80.0);
        
        Student stu = MyBatisSessionFactory.getSession().selectOne("cn.mldn.mapping.MemberNS.findByStudentId","mldn-stu");
        System.out.println(stu);
        System.out.println(stu.getClass());
        MyBatisSessionFactory.close();
    }

}
package cn.mldn.pojo.test;

import cn.mldn.pojo.Worker;
import cn.mldn.util.MyBatisSessionFactory;

public class TestWorkerAdd {

    public static void main(String[] args) {
        Worker wkr = new Worker();
        
        wkr.setMid("mldn-wkr");
        wkr.setName("成功万");
        wkr.setAge(38);
        wkr.setCompany("西伯利亚难民营");
        wkr.setSalary(10000.0);
        
        System.out.println(MyBatisSessionFactory.getSession().insert("cn.mldn.mapping.MemberNS.doCreateWorker",wkr));
        MyBatisSessionFactory.getSession().commit();
        MyBatisSessionFactory.close();
    }

}

注解的方式实现

package cn.mldn.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;
import org.apache.ibatis.annotations.Update;

import cn.mldn.vo.News;

public interface INewsDAO {
    @Insert("INSERT INTO news (title,pub_date) VALUES (#{title},#{pubdate})")
    @SelectKey(before=false,keyProperty="nid",resultType=java.lang.Integer.class,statement="SELECT LAST_INSERT_ID()")
    public boolean doCreate(News vo) throws Exception ;
    
    @Update("UPDATE news SET title=#{title} ,pub_date=#{pubdate} WHERE nid=#{nid}")
    public boolean doUpdate(News vo) throws Exception ;
    
    @Delete("DELETE FROM news WHERE nid=#{nid}")
    public boolean doRemove(Integer id) throws Exception ;
    
    @Select("SELECT nid,title,pub_date AS pubdate FROM news WHERE nid=#{nid}")
    public News findById(Integer id) throws Exception ;
    
    @Select("SELECT nid,title,pub_date AS pubdate FROM news")
    public List<News> findAll() throws Exception ;
    
    @Select("SELECT nid,title,pub_date AS pubdate FROM news WHERE ${column} LIKE #{keyWord} LIMIT #{start} ,#{lineSize}")
    public List<News> findAllSplit(
            @Param("column") String column,
            @Param("keyWord") String keyWord,
            @Param("start") Integer start,
            @Param("lineSize") Integer lineSize) throws Exception ;
    
    @Select("SELECT COUNT(*) FROM nid WHERE #{column} LIKE #{keyWord}")
    public Integer getAllCount(
            @Param("column")  String column,
            @Param("keyWord") String keyWord) throws Exception ;
}
package cn.mldn.anno;

import java.io.InputStream;
import java.util.Date;

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 cn.mldn.dao.INewsDAO;
import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsAdd {

    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        
        News vo = new News();
        
        vo.setTitle("jintian niubi!");
        vo.setPubdate(new Date());
        
        INewsDAO dao = MyBatisSessionFactory.getSession().getMapper(INewsDAO.class) ;
        
        boolean len = dao.doCreate(vo);
        System.out.println("影响的数据行数 :" + len + ", nid=" + vo.getNid() );
        
         MyBatisSessionFactory.getSession().commit();
         MyBatisSessionFactory.close();

        
    }

}
package cn.mldn.anno;

import java.io.InputStream;
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 cn.mldn.dao.INewsDAO;
import cn.mldn.util.MyBatisSessionFactory;
import cn.mldn.vo.Member;
import cn.mldn.vo.News;

public class TestNewsList {

    public static void main(String[] args) throws Exception{
        
        INewsDAO dao = MyBatisSessionFactory.getSession().getMapper(INewsDAO.class) ;
        
        List<News> news = dao.findAllSplit("title", "%%", 0, 5);
        System.out.println(news );
    
         MyBatisSessionFactory.close();
    }

}

end 

一级缓存,当事务提交之后缓存才会清空。或者直接调用 MyBatisSessionFactory.getSession().clearCache(); 清空缓存

二级缓存,启用之后,当上一个会话关闭之后,缓存清空!