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(); 清空缓存
二级缓存,启用之后,当上一个会话关闭之后,缓存清空!