文档结构:
src/config
ibatisConfiguration.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> //类型别名设置 <typeAliases> <typeAlias alias="Article" type="dao.domain.Article"/> <typeAlias alias="Classtype" type="dao.domain.Classtype"/> </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/manage?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> //映射表 <mappers> <mapper resource="config/ArticleMapper.xml" /> <mapper resource="config/ClassTypeMapper.xml" /> </mappers> </configuration>
<?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="dao.ArticleDAO" > //sql标签,用于标记常用的字符. <sql id="articleFileds">article_id,title,author,classid</sql> //parameterType,参数类型 //resultType。返回类型 //id。唯一值,调用时使用。 <select id="getArticleById" resultType="Article" parameterType="int"> //include标签,复用sql标签 select <include refid="articleFileds"/> from article where article_id = #{id} </select> //mybatis中最关键的标签:resultMap <resultMap id="ArticleAndClassType" type="Article"> <id property="article_id" column="article_id" /> <result property="title" column="title" /> <result property="author" column="author" /> <result property="classid" column="classid" /> //一对一映射的关键:association //select:执行dao.ClassTypeDAO.getClassTypeById方法,并将返回值设置到peoperty.来完成一对一映射 <association property="classtype" column="classid" select="dao.ClassTypeDAO.getClassTypeById"/> </resultMap> //resultMap:通过此值指向resultMap,可以进行复杂的处理 <select id="getArticleAndClassTypeById" resultMap="ArticleAndClassType" parameterType="int"> select <include refid="articleFileds"/> from article where article_id = #{id} </select> </mapper>
<?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="dao.ClassTypeDAO" > <sql id="classtypeFileds">classid, classname</sql> <select id="getClassTypeById" parameterType="int" resultType="Classtype"> select <include refid="classtypeFileds"/> from classtype where classid = #{id} </select> </mapper>
Article.java
package dao.domain; public class Article { public int article_id; public String title; public String author; public int classid; public Classtype classtype; public Classtype getClasstype() { return classtype; } public void setClasstype(Classtype classtype) { this.classtype = classtype; } public int getArticle_id() { return article_id; } public void setArticle_id(int article_id) { this.article_id = article_id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getClassid() { return classid; } public void setClassid(int classid) { this.classid = classid; } @Override public String toString() { return "Article [article_id=" + article_id + ", title=" + title + ", author=" + author + ", classid=" + classid + ", classtype=" + classtype + "]"; } }
package dao.domain; public class Classtype { public int classid; public String classname; public int getClassid() { return classid; } public void setClassid(int classid) { this.classid = classid; } public String getClassname() { return classname; } public void setClassname(String classname) { this.classname = classname; } @Override public String toString() { return "Classtype [classid=" + classid + ", classname=" + classname + "]"; } }
ArticleDAO.java
package dao; import java.util.HashMap; import dao.domain.Article; public interface ArticleDAO { public Article getArticleById(int id); public Article getArticleAndClassTypeById(int id); }
package dao; import dao.domain.Classtype; public interface ClassTypeDAO { public Classtype getClassTypeById(int id); }
ArticleDAOImpl.java
package dao.impl; import java.io.IOException; import java.io.Reader; import java.util.HashMap; 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 dao.ArticleDAO; import dao.domain.Article; public class ArticleDAOImpl implements ArticleDAO { private static SqlSession session = null; private static ArticleDAO mapper = null; static{ String resouce = "config/ibatisConfiguration.xml"; Reader reader = null; try { reader = Resources.getResourceAsReader(resouce); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); session = factory.openSession(); mapper = session.getMapper(ArticleDAO.class); try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } @Override public Article getArticleById(int id) { return mapper.getArticleById(id); } @Override public Article getArticleAndClassTypeById(int id) { return mapper.getArticleAndClassTypeById(id); } }
package dao.impl; import java.io.IOException; import java.io.Reader; 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 dao.ClassTypeDAO; import dao.domain.Classtype; public class ClassTypeDAOImple implements ClassTypeDAO { private static SqlSession session = null; private static ClassTypeDAO mapper = null; static{ String resouce = "config/ibatisConfiguration.xml"; Reader reader = null; try { reader = Resources.getResourceAsReader(resouce); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader); session = factory.openSession(); mapper = session.getMapper(ClassTypeDAO.class); try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } @Override public Classtype getClassTypeById(int id) { return mapper.getClassTypeById(id); } }
test.java
package test; import dao.ArticleDAO; import dao.ClassTypeDAO; import dao.impl.ArticleDAOImpl; import dao.impl.ClassTypeDAOImple; public class Test { /** * @param args */ public static void main(String[] args) { ArticleDAO dao = new ArticleDAOImpl(); System.out.println(dao.getArticleById(3)); System.out.println(dao.getArticleAndClassTypeById(2)); ClassTypeDAO classtypeDAO = new ClassTypeDAOImple(); System.out.println(classtypeDAO.getClassTypeById(1)); } }
Article [article_id=3, title=title, author=test, classid=1, classtype=null]
Article [article_id=2, title=title, author=test, classid=1, classtype=Classtype [classid=1, classname=test]]
Classtype [classid=1, classname=test]