Ibatis基础学习案例
2012-05-24 16:15
323 查看
这是一个完整的案例,可以运行。
Ibtis的核心包Sqlconfig.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="Author" type="org.mybatis.model.Author"/>
<typeAlias alias="Blog" type="org.mybatis.model.Blog"/>
<typeAlias alias="Comment" type="org.mybatis.model.Comment"/>
<typeAlias alias="Post" type="org.mybatis.model.Post"/>
<typeAlias alias="Tag" type="org.mybatis.model.Tag"/>
</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/blogdb?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="Sun_1024" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/model/BlogMapper.xml"/>
<!-- <mapper resource="org/mybatis/model/AuthorMapper.xml"/> -->
<!-- <mapper resource="org/mybatis/model/PostMapper.xml"/> -->
</mappers>
</configuration>
实体类映射BlogMapper.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="org.mybatis.model.BlogMapper">
<!--简单的几种查询-->
<select id="selectBlog_by_id" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
<select id="selectBlog_by_id_Map" parameterType="HashMap"
resultType="Blog">
select * from Blog where id = #{id}
</select>
<select id="selectBlog_by_bean" parameterType="Blog" resultType="Blog">
select * from Blog where id = #{id}
</select>
<!--联合查询-->
<!-- <resultMap id="blogResultMap" type="Blog">-->
<!-- <id property="id" column="id" />-->
<!-- <result property="title" column="title" />-->
<!-- <result property="authorId" column="author_id" />-->
<!-- </resultMap>-->
<!---->
<!-- <select id="selectBlog_use_as" parameterType="HashMap"-->
<!-- resultType="Blog">-->
<!-- select id , title, author_id as authorid from Blog where id-->
<!-- = #{id}-->
<!-- </select>-->
<!---->
<!-- <select id="selectBlog_use_resultMap" parameterType="HashMap"-->
<!-- resultMap="blogResultMap">-->
<!-- select id , title, author_id from Blog where id = #{id}-->
<!-- </select>-->
<!-- update,delete,insert操作 -->
<update id="updateBlog_use_bean" statementType="PREPARED"
parameterType="Blog">
update blog set title= #{title}, author_id=#{authorId}
where id =
#{id}
</update>
<delete id="deleteBlog_use_bean" statementType="PREPARED"
parameterType="Blog">
delete from blog where id = #{id}
</delete>
<insert id="insertBlog_user_bean" statementType="PREPARED"
parameterType="Blog">
insert into blog(id, title, author_id) values(#{id},
#{title},
#{authorId})
</insert>
<!--自动生成主键 下面是自动生成blog的id的值,生成规则是:当前表中最大的id值加1。 -->
<!-- <insert id="insertBlog_user_autokey" statementType="PREPARED"-->
<!-- parameterType="Blog">-->
<!-- <selectKey keyProperty="id" resultType="int" order="BEFORE">-->
<!-- select-->
<!-- max(id)+1 from blog -->
<!-- </selectKey>-->
<!-- insert into blog(title, author_id) values(#{id}, #{title},-->
<!-- #{authorId})-->
<!-- </insert>-->
<!-- 处理NULL值 像上面的例子,如果myBlog.setTitle(null)情况会怎样呢?那么程序会报错:-->
<insert id="insertBlog_user_autokey" statementType="PREPARED"
parameterType="Blog" flushCache="true">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select
max(id)+1 from blog
</selectKey>
insert into blog(id, title, author_id) values(#{id},
#{title,jdbcType=VARCHAR},
#{authorId})
</insert>
<!--
使用Constructor元素是将数据库查询的结果通过构造器注入到结果映射类(JavaBean) 中,可以理解为spring中的构造器注入
-->
<resultMap id="blogResultMap" type="Blog">
<constructor>
<idArg column="id" javaType="int" />
<arg column="title" javaType="String" />
<arg column="author_id" javaType="int" />
</constructor>
</resultMap>
<select id="selectBlog_use_constructor" resultMap="blogResultMap">
select id ,
title, author_id from Blog where id = #{id}
</select>
<!--
� 使用Association元素 一个作者有一个博客,这是种“has-a”的一对一关系,现在我们使用Association元素把博
客及作者的信息查询出来-
-->
<!-- 方案一 -->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <id property="id" column="blog_id" />-->
<!-- <result property="title" column="blog_title" />-->
<!---->
<!-- <association property="author" javaType="Author">-->
<!-- <id property="id" column="author_id" />-->
<!-- <result property="username" column="author_username" />-->
<!-- <result property="password" column="author_password" />-->
<!-- <result property="email" column="author_email" />-->
<!-- <result property="bio" column="author_bio" />-->
<!-- </association>-->
<!-- </resultMap>-->
<!---->
<!-- <select id="selectBlog_use_association" parameterType="int"-->
<!-- resultMap="blogResult">-->
<!-- select-->
<!-- B.id as blog_id,-->
<!-- B.title as blog_title,-->
<!---->
<!-- A.id as-->
<!-- author_id,-->
<!-- A.username as author_username,-->
<!-- A.password as author_password,-->
<!-- A.email as author_email,-->
<!-- A.bio as author_bio-->
<!-- from Blog B left outer join-->
<!-- Author A on B.author_id = A.id-->
<!-- where B.id = #{id} -->
<!-- </select>-->
<!-- 方案二 -->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <id property="id" column="blog_id" />-->
<!-- <result property="title" column="blog_title" />-->
<!-- <association property="author" column="blog_author_id"-->
<!-- javaType="Author" resultMap="authorResult" />-->
<!-- </resultMap>-->
<!---->
<!-- <resultMap id="authorResult" type="Author">-->
<!-- <id property="id" column="author_id" />-->
<!-- <result property="username" column="author_username" />-->
<!-- <result property="password" column="author_password" />-->
<!-- <result property="email" column="author_email" />-->
<!-- <result property="bio" column="author_bio" />-->
<!-- </resultMap>-->
<!---->
<!-- <select id="selectBlog_use_association" parameterType="int"-->
<!-- resultMap="blogResult">-->
<!-- select-->
<!-- B.id as blog_id,-->
<!-- B.title as blog_title,-->
<!-- A.id as-->
<!-- author_id,-->
<!-- A.username as author_username,-->
<!-- A.password as author_password,-->
<!-- A.email as author_email,-->
<!-- A.bio as author_bio-->
<!-- from Blog B left outer join-->
<!-- Author A on B.author_id = A.id-->
<!-- where B.id = #{id} -->
<!-- </select>-->
<!-- 方案三 -->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <association property="author" column="author_id"-->
<!-- javaType="Author" select="selectAuthor" />-->
<!-- </resultMap>-->
<!--
<select id="selectAuthor" parameterType="int" resultType="Author">
-->
<!-- SELECT-->
<!-- * FROM AUTHOR WHERE ID = #{id} -->
<!-- </select>-->
<!-- <select id="selectBlog_use_association" parameterType="int"-->
<!-- resultMap="blogResult">-->
<!-- SELECT * FROM BLOG WHERE ID = #{id} -->
<!-- </select>-->
<!--
方案三中如果"selectBlog_use_association"查询返回N条博客记录,修改一下。
注:如果SQL语句有特殊符号,需要用<![CDATA[]]>括起来。这里的小于号<被认为
是特殊符号,如果不用<![CDATA[]]>括起来是执行不了的 ,调用代码也相应的改变
-->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <association property="author" column="author_id"-->
<!-- javaType="Author" select="selectAuthor" />-->
<!-- </resultMap>-->
<!--
<select id="selectAuthor" parameterType="int" resultType="Author">
-->
<!-- SELECT-->
<!-- * FROM AUTHOR WHERE ID = #{id} -->
<!-- </select>-->
<!-- <select id="selectBlog_use_association" resultMap="blogResult"> -->
<!--
<![CDATA[SELECT * FROM BLOG WHERE ID > 0 and ID < 7]]>
-->
<!-- </select>-->
<!--
使用Collection元素 Collection元素用来处理“一对多”的数据模型,例如,一个博客有许多文章(Posts)。
在博客类里,应该有一个文章的列表
-->
<!--方案一-->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <id property="id" column="id" />-->
<!-- <result property="title" column="title" />-->
<!-- <result property="authorId" column="authorid" />-->
<!-- <collection property="posts" javaType="ArrayList" column="id"-->
<!-- ofType="Post" select="selectPostsForBlog" />-->
<!-- </resultMap>-->
<!---->
<!--
<select id="selectPostsForBlog" parameterType="int" resultType="Post">
-->
<!-- SELECT * FROM POST WHERE BLOG_ID = #{id} -->
<!-- </select>-->
<!---->
<!-- <select id="selectBlog_use_collection" resultMap="blogResult"> -->
<!--
<![CDATA[SELECT id , title, author_id as authorid FROM BLOG WHERE ID >
0 and ID
-->
<!--< 4]]>-->
<!-- </select>-->
<!--方案二-->
<resultMap id="blogResult" type="Blog">
<id property="id" column="blog_id" />
<result property="title" column="blog_title" />
<result property="authorId" column="authorid" />
<collection property="posts" ofType="Post">
<id property="id" column="post_id" />
<result property="subject" column="post_subject" />
<result property="section" column="post_section" />
<result property="body" column="post_body" />
</collection>
</resultMap>
<select id="selectBlog_use_collection" resultMap="blogResult">
<![CDATA[
select
B.id as blog_id,
B.title as blog_title,
B.author_id as authorid,
P.id as post_id,
P.subject as post_subject,
P.section as post_section,
P.body as post_body
from Blog B
left outer join Post P on B.id = P.blog_id
where B.id > 0 and B.id < 4]]>
</select>
</mapper>
Author类
package org.mybatis.model;
public class Author {
private Integer id;
private String username;
private String password;
private String email;
private String bio;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getBio() {
return bio;
}
public void setBio(String bio) {
this.bio = bio;
}
}
Blog类
package org.mybatis.model;
import java.util.List;
public class Blog {
private Integer id;
private String title;
private Integer authorId;
private Author author;
private List<Post> posts ;
public Blog() {
super();
}
public Blog(Integer id, String title, Integer authorId) {
super();
this.id = id;
this.title = title;
this.authorId = authorId;
}
public Author getAuthor() {
return author;
}
public Integer getAuthorId() {
return authorId;
}
public Integer getId() {
return id;
}
public String getTitle() {
return title;
}
public void setAuthor(Author author) {
this.author = author;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public void setId(Integer id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setPosts(List<Post> posts) {
this.posts = posts;
}
public List<Post> getPosts() {
return posts;
}
}
Post类
package org.mybatis.model;
public class Post {
private Integer id;
private Integer blogId;
private Integer authorId;
private String createdOn;
private String section;
private String subject;
private String body;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getBlogId() {
return blogId;
}
public void setBlogId(Integer blogId) {
this.blogId = blogId;
}
public Integer getAuthorId() {
return authorId;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public String getCreatedOn() {
return createdOn;
}
public void setCreatedOn(String createdOn) {
this.createdOn = createdOn;
}
public String getSection() {
return section;
}
public void setSection(String section) {
this.section = section;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
SimpleMapper类
package org.mybatis.action;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.BasicConfigurator;
import org.mybatis.model.Blog;
import org.mybatis.model.BlogMapper;
import org.mybatis.model.Post;
import org.mybatis.service.SqlMapperManager;
public class SimpleMapper {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
SqlSession session = null;
Blog blog = null;
try {
SqlSessionFactory factory = SqlMapperManager.getFactory();
if (factory == null) {
System.out.println("get SqlSessionFactory failed.");
return;
}
session = factory.openSession();
下面的代码中有//注释掉的按功能去掉
// HashMap<String, Integer> paramMap = new HashMap<String,
// Integer>();
// paramMap.put("id", 2);
//
// Blog myBlog = new Blog();
// myBlog.setId(3);
//
// blog = (Blog) session.selectOne("selectBlog_by_id", 1);
// pringBlog(blog);
//
// blog = (Blog) session.selectOne("selectBlog_by_id_Map",
// paramMap);
// pringBlog(blog);
//
// blog = (Blog) session.selectOne("selectBlog_by_bean", myBlog);
// pringBlog(blog);
// HashMap<String, Integer> paramMap = new HashMap<String,
// Integer>();
// paramMap.put("id", 2);
//
// Blog myBlog = new Blog();
// myBlog.setId(3);
//
// blog = (Blog) session.selectOne("selectBlog_use_as", myBlog);
// pringBlog(blog);
//
// blog = (Blog) session.selectOne("selectBlog_use_resultMap",
// paramMap);
// pringBlog(blog);
// Blog myBlog = new Blog();
// myBlog.setId(3);
// myBlog.setTitle("I Love Photh");
// myBlog.setAuthorId(3);
//
// session.update("updateBlog_use_bean", myBlog); session.commit();
// session.delete("deleteBlog_use_bean", myBlog); session.commit();
// session.insert("insertBlog_user_bean", myBlog); session.commit();
// Blog myBlog1 = new Blog();
// myBlog1.setTitle("I Love Photh");
// myBlog1.setAuthorId(3);
// session.insert("insertBlog_user_autokey", myBlog1);
// session.insert("insertBlog_user_autokey", myBlog1);
// session.insert("insertBlog_user_autokey", myBlog1);
//SimpleMapper.userMapper(session);
//使用Constructor元素是将数据库查询的结果通过构造器注入到结果映射类(JavaBean) 中,的测试
// blog = (Blog)session.selectOne("selectBlog_use_constructor", 3);
// pringBlog(blog);
//查询返回1条博客记录
// blog = (Blog)session.selectOne("selectBlog_use_association", 3);
// printBlogAuthor(blog);
//查询返回N条博客记录
// List<Blog> blogList = (List<Blog>)session.selectList("selectBlog_use_association");
// printBlogAuthorList(blogList);
//使用Collection元素 Collection元素用来处理“一对多”的数据模型
List<Blog> blogList = (List<Blog>)session.selectList("selectBlog_use_collection");
printBlogPosts(blogList);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
public static void pringBlog(Blog blog) {
if (blog != null) {
System.out.println("ID:" + blog.getId());
System.out.println("title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthorId());
} else {
System.out.println("blog=null");
}
}
/**
* 使用接口映射类 对给定的映射语句,使用一个正确描述参数与返回值的接口(如BlogMapper.class)
* @param session
*/
public static void userMapper(SqlSession session)
{
Blog blog = new Blog();
blog.setTitle("nothing title");
blog.setId(1);
blog.setAuthorId(1);
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog1 = blogMapper.selectBlog_by_id(1);
pringBlog(blog1);
blogMapper.updateBlog_use_bean(blog);
blog1 = blogMapper.selectBlog_by_id(1);
pringBlog(blog1);
}
/**
* 查询返回1条博客记录
* @param blog
*/
public static void printBlogAuthor(Blog blog)
{
System.out.println("ID:" + blog.getId());
System.out.println("title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthor().getId());
System.out.println("authorName:" + blog.getAuthor().getUsername());
System.out.println("authorPassword:" + blog.getAuthor().getPassword());
System.out.println("authorEmail:" + blog.getAuthor().getEmail());
System.out.println("authorBio:" + blog.getAuthor().getBio());
}
/**
* 查询返回N条博客记录
* @param blogList
*/
public static void printBlogAuthorList(List<Blog> blogList)
{
for (Blog blog : blogList)
{
System.out.println("===========================");
System.out.println("ID:" + blog.getId());
System.out.println("title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthor().getId());
System.out.println("authorName:" + blog.getAuthor().getUsername());
System.out.println("authorPassword:" + blog.getAuthor().getPassword());
System.out.println("authorEmail:" + blog.getAuthor().getEmail());
System.out.println("authorBio:" + blog.getAuthor().getBio());
}
}
/**
* 使用Collection元素 Collection元素用来处理“一对多”的数据模型
* @param blogList
*/
public static void printBlogPosts(List<Blog> blogList)
{
for (Blog blog : blogList)
{
System.out.println("\n===========================");
System.out.println("ID:" + blog.getId());
System.out.println("blog_title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthorId());
System.out.println("===========posts=============");
for (Post post : blog.getPosts())
{
System.out.println("subject:" + post.getSubject());
System.out.println("section:" + post.getSection());
System.out.println("body:" + post.getBody());
}
}
}
}
SqlMapperManager类
package org.mybatis.service;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlMapperManager {
private static SqlSessionFactory factory = null;
private static String fileName = "Sqlconfig.xml";
private SqlMapperManager()
{
}
public static void initMapper(String sqlMapperFileName)
{
fileName = sqlMapperFileName;
}
public static SqlSessionFactory getFactory()
{
try
{
if (factory == null)
{
Reader reader = Resources
.getResourceAsReader(fileName);
SqlSessionFactoryBuilder builder =
new SqlSessionFactoryBuilder();
factory = builder.build(reader);
builder = null;
}
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
return factory;
}
}
Ibtis的核心包Sqlconfig.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="Author" type="org.mybatis.model.Author"/>
<typeAlias alias="Blog" type="org.mybatis.model.Blog"/>
<typeAlias alias="Comment" type="org.mybatis.model.Comment"/>
<typeAlias alias="Post" type="org.mybatis.model.Post"/>
<typeAlias alias="Tag" type="org.mybatis.model.Tag"/>
</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/blogdb?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="Sun_1024" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/model/BlogMapper.xml"/>
<!-- <mapper resource="org/mybatis/model/AuthorMapper.xml"/> -->
<!-- <mapper resource="org/mybatis/model/PostMapper.xml"/> -->
</mappers>
</configuration>
实体类映射BlogMapper.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="org.mybatis.model.BlogMapper">
<!--简单的几种查询-->
<select id="selectBlog_by_id" parameterType="int" resultType="Blog">
select * from Blog where id = #{id}
</select>
<select id="selectBlog_by_id_Map" parameterType="HashMap"
resultType="Blog">
select * from Blog where id = #{id}
</select>
<select id="selectBlog_by_bean" parameterType="Blog" resultType="Blog">
select * from Blog where id = #{id}
</select>
<!--联合查询-->
<!-- <resultMap id="blogResultMap" type="Blog">-->
<!-- <id property="id" column="id" />-->
<!-- <result property="title" column="title" />-->
<!-- <result property="authorId" column="author_id" />-->
<!-- </resultMap>-->
<!---->
<!-- <select id="selectBlog_use_as" parameterType="HashMap"-->
<!-- resultType="Blog">-->
<!-- select id , title, author_id as authorid from Blog where id-->
<!-- = #{id}-->
<!-- </select>-->
<!---->
<!-- <select id="selectBlog_use_resultMap" parameterType="HashMap"-->
<!-- resultMap="blogResultMap">-->
<!-- select id , title, author_id from Blog where id = #{id}-->
<!-- </select>-->
<!-- update,delete,insert操作 -->
<update id="updateBlog_use_bean" statementType="PREPARED"
parameterType="Blog">
update blog set title= #{title}, author_id=#{authorId}
where id =
#{id}
</update>
<delete id="deleteBlog_use_bean" statementType="PREPARED"
parameterType="Blog">
delete from blog where id = #{id}
</delete>
<insert id="insertBlog_user_bean" statementType="PREPARED"
parameterType="Blog">
insert into blog(id, title, author_id) values(#{id},
#{title},
#{authorId})
</insert>
<!--自动生成主键 下面是自动生成blog的id的值,生成规则是:当前表中最大的id值加1。 -->
<!-- <insert id="insertBlog_user_autokey" statementType="PREPARED"-->
<!-- parameterType="Blog">-->
<!-- <selectKey keyProperty="id" resultType="int" order="BEFORE">-->
<!-- select-->
<!-- max(id)+1 from blog -->
<!-- </selectKey>-->
<!-- insert into blog(title, author_id) values(#{id}, #{title},-->
<!-- #{authorId})-->
<!-- </insert>-->
<!-- 处理NULL值 像上面的例子,如果myBlog.setTitle(null)情况会怎样呢?那么程序会报错:-->
<insert id="insertBlog_user_autokey" statementType="PREPARED"
parameterType="Blog" flushCache="true">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select
max(id)+1 from blog
</selectKey>
insert into blog(id, title, author_id) values(#{id},
#{title,jdbcType=VARCHAR},
#{authorId})
</insert>
<!--
使用Constructor元素是将数据库查询的结果通过构造器注入到结果映射类(JavaBean) 中,可以理解为spring中的构造器注入
-->
<resultMap id="blogResultMap" type="Blog">
<constructor>
<idArg column="id" javaType="int" />
<arg column="title" javaType="String" />
<arg column="author_id" javaType="int" />
</constructor>
</resultMap>
<select id="selectBlog_use_constructor" resultMap="blogResultMap">
select id ,
title, author_id from Blog where id = #{id}
</select>
<!--
� 使用Association元素 一个作者有一个博客,这是种“has-a”的一对一关系,现在我们使用Association元素把博
客及作者的信息查询出来-
-->
<!-- 方案一 -->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <id property="id" column="blog_id" />-->
<!-- <result property="title" column="blog_title" />-->
<!---->
<!-- <association property="author" javaType="Author">-->
<!-- <id property="id" column="author_id" />-->
<!-- <result property="username" column="author_username" />-->
<!-- <result property="password" column="author_password" />-->
<!-- <result property="email" column="author_email" />-->
<!-- <result property="bio" column="author_bio" />-->
<!-- </association>-->
<!-- </resultMap>-->
<!---->
<!-- <select id="selectBlog_use_association" parameterType="int"-->
<!-- resultMap="blogResult">-->
<!-- select-->
<!-- B.id as blog_id,-->
<!-- B.title as blog_title,-->
<!---->
<!-- A.id as-->
<!-- author_id,-->
<!-- A.username as author_username,-->
<!-- A.password as author_password,-->
<!-- A.email as author_email,-->
<!-- A.bio as author_bio-->
<!-- from Blog B left outer join-->
<!-- Author A on B.author_id = A.id-->
<!-- where B.id = #{id} -->
<!-- </select>-->
<!-- 方案二 -->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <id property="id" column="blog_id" />-->
<!-- <result property="title" column="blog_title" />-->
<!-- <association property="author" column="blog_author_id"-->
<!-- javaType="Author" resultMap="authorResult" />-->
<!-- </resultMap>-->
<!---->
<!-- <resultMap id="authorResult" type="Author">-->
<!-- <id property="id" column="author_id" />-->
<!-- <result property="username" column="author_username" />-->
<!-- <result property="password" column="author_password" />-->
<!-- <result property="email" column="author_email" />-->
<!-- <result property="bio" column="author_bio" />-->
<!-- </resultMap>-->
<!---->
<!-- <select id="selectBlog_use_association" parameterType="int"-->
<!-- resultMap="blogResult">-->
<!-- select-->
<!-- B.id as blog_id,-->
<!-- B.title as blog_title,-->
<!-- A.id as-->
<!-- author_id,-->
<!-- A.username as author_username,-->
<!-- A.password as author_password,-->
<!-- A.email as author_email,-->
<!-- A.bio as author_bio-->
<!-- from Blog B left outer join-->
<!-- Author A on B.author_id = A.id-->
<!-- where B.id = #{id} -->
<!-- </select>-->
<!-- 方案三 -->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <association property="author" column="author_id"-->
<!-- javaType="Author" select="selectAuthor" />-->
<!-- </resultMap>-->
<!--
<select id="selectAuthor" parameterType="int" resultType="Author">
-->
<!-- SELECT-->
<!-- * FROM AUTHOR WHERE ID = #{id} -->
<!-- </select>-->
<!-- <select id="selectBlog_use_association" parameterType="int"-->
<!-- resultMap="blogResult">-->
<!-- SELECT * FROM BLOG WHERE ID = #{id} -->
<!-- </select>-->
<!--
方案三中如果"selectBlog_use_association"查询返回N条博客记录,修改一下。
注:如果SQL语句有特殊符号,需要用<![CDATA[]]>括起来。这里的小于号<被认为
是特殊符号,如果不用<![CDATA[]]>括起来是执行不了的 ,调用代码也相应的改变
-->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <association property="author" column="author_id"-->
<!-- javaType="Author" select="selectAuthor" />-->
<!-- </resultMap>-->
<!--
<select id="selectAuthor" parameterType="int" resultType="Author">
-->
<!-- SELECT-->
<!-- * FROM AUTHOR WHERE ID = #{id} -->
<!-- </select>-->
<!-- <select id="selectBlog_use_association" resultMap="blogResult"> -->
<!--
<![CDATA[SELECT * FROM BLOG WHERE ID > 0 and ID < 7]]>
-->
<!-- </select>-->
<!--
使用Collection元素 Collection元素用来处理“一对多”的数据模型,例如,一个博客有许多文章(Posts)。
在博客类里,应该有一个文章的列表
-->
<!--方案一-->
<!-- <resultMap id="blogResult" type="Blog">-->
<!-- <id property="id" column="id" />-->
<!-- <result property="title" column="title" />-->
<!-- <result property="authorId" column="authorid" />-->
<!-- <collection property="posts" javaType="ArrayList" column="id"-->
<!-- ofType="Post" select="selectPostsForBlog" />-->
<!-- </resultMap>-->
<!---->
<!--
<select id="selectPostsForBlog" parameterType="int" resultType="Post">
-->
<!-- SELECT * FROM POST WHERE BLOG_ID = #{id} -->
<!-- </select>-->
<!---->
<!-- <select id="selectBlog_use_collection" resultMap="blogResult"> -->
<!--
<![CDATA[SELECT id , title, author_id as authorid FROM BLOG WHERE ID >
0 and ID
-->
<!--< 4]]>-->
<!-- </select>-->
<!--方案二-->
<resultMap id="blogResult" type="Blog">
<id property="id" column="blog_id" />
<result property="title" column="blog_title" />
<result property="authorId" column="authorid" />
<collection property="posts" ofType="Post">
<id property="id" column="post_id" />
<result property="subject" column="post_subject" />
<result property="section" column="post_section" />
<result property="body" column="post_body" />
</collection>
</resultMap>
<select id="selectBlog_use_collection" resultMap="blogResult">
<![CDATA[
select
B.id as blog_id,
B.title as blog_title,
B.author_id as authorid,
P.id as post_id,
P.subject as post_subject,
P.section as post_section,
P.body as post_body
from Blog B
left outer join Post P on B.id = P.blog_id
where B.id > 0 and B.id < 4]]>
</select>
</mapper>
Author类
package org.mybatis.model;
public class Author {
private Integer id;
private String username;
private String password;
private String email;
private String bio;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getBio() {
return bio;
}
public void setBio(String bio) {
this.bio = bio;
}
}
Blog类
package org.mybatis.model;
import java.util.List;
public class Blog {
private Integer id;
private String title;
private Integer authorId;
private Author author;
private List<Post> posts ;
public Blog() {
super();
}
public Blog(Integer id, String title, Integer authorId) {
super();
this.id = id;
this.title = title;
this.authorId = authorId;
}
public Author getAuthor() {
return author;
}
public Integer getAuthorId() {
return authorId;
}
public Integer getId() {
return id;
}
public String getTitle() {
return title;
}
public void setAuthor(Author author) {
this.author = author;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public void setId(Integer id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setPosts(List<Post> posts) {
this.posts = posts;
}
public List<Post> getPosts() {
return posts;
}
}
Post类
package org.mybatis.model;
public class Post {
private Integer id;
private Integer blogId;
private Integer authorId;
private String createdOn;
private String section;
private String subject;
private String body;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getBlogId() {
return blogId;
}
public void setBlogId(Integer blogId) {
this.blogId = blogId;
}
public Integer getAuthorId() {
return authorId;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public String getCreatedOn() {
return createdOn;
}
public void setCreatedOn(String createdOn) {
this.createdOn = createdOn;
}
public String getSection() {
return section;
}
public void setSection(String section) {
this.section = section;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
SimpleMapper类
package org.mybatis.action;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.BasicConfigurator;
import org.mybatis.model.Blog;
import org.mybatis.model.BlogMapper;
import org.mybatis.model.Post;
import org.mybatis.service.SqlMapperManager;
public class SimpleMapper {
/**
* @param args
*/
public static void main(String[] args) {
BasicConfigurator.configure();
SqlSession session = null;
Blog blog = null;
try {
SqlSessionFactory factory = SqlMapperManager.getFactory();
if (factory == null) {
System.out.println("get SqlSessionFactory failed.");
return;
}
session = factory.openSession();
下面的代码中有//注释掉的按功能去掉
// HashMap<String, Integer> paramMap = new HashMap<String,
// Integer>();
// paramMap.put("id", 2);
//
// Blog myBlog = new Blog();
// myBlog.setId(3);
//
// blog = (Blog) session.selectOne("selectBlog_by_id", 1);
// pringBlog(blog);
//
// blog = (Blog) session.selectOne("selectBlog_by_id_Map",
// paramMap);
// pringBlog(blog);
//
// blog = (Blog) session.selectOne("selectBlog_by_bean", myBlog);
// pringBlog(blog);
// HashMap<String, Integer> paramMap = new HashMap<String,
// Integer>();
// paramMap.put("id", 2);
//
// Blog myBlog = new Blog();
// myBlog.setId(3);
//
// blog = (Blog) session.selectOne("selectBlog_use_as", myBlog);
// pringBlog(blog);
//
// blog = (Blog) session.selectOne("selectBlog_use_resultMap",
// paramMap);
// pringBlog(blog);
// Blog myBlog = new Blog();
// myBlog.setId(3);
// myBlog.setTitle("I Love Photh");
// myBlog.setAuthorId(3);
//
// session.update("updateBlog_use_bean", myBlog); session.commit();
// session.delete("deleteBlog_use_bean", myBlog); session.commit();
// session.insert("insertBlog_user_bean", myBlog); session.commit();
// Blog myBlog1 = new Blog();
// myBlog1.setTitle("I Love Photh");
// myBlog1.setAuthorId(3);
// session.insert("insertBlog_user_autokey", myBlog1);
// session.insert("insertBlog_user_autokey", myBlog1);
// session.insert("insertBlog_user_autokey", myBlog1);
//SimpleMapper.userMapper(session);
//使用Constructor元素是将数据库查询的结果通过构造器注入到结果映射类(JavaBean) 中,的测试
// blog = (Blog)session.selectOne("selectBlog_use_constructor", 3);
// pringBlog(blog);
//查询返回1条博客记录
// blog = (Blog)session.selectOne("selectBlog_use_association", 3);
// printBlogAuthor(blog);
//查询返回N条博客记录
// List<Blog> blogList = (List<Blog>)session.selectList("selectBlog_use_association");
// printBlogAuthorList(blogList);
//使用Collection元素 Collection元素用来处理“一对多”的数据模型
List<Blog> blogList = (List<Blog>)session.selectList("selectBlog_use_collection");
printBlogPosts(blogList);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
public static void pringBlog(Blog blog) {
if (blog != null) {
System.out.println("ID:" + blog.getId());
System.out.println("title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthorId());
} else {
System.out.println("blog=null");
}
}
/**
* 使用接口映射类 对给定的映射语句,使用一个正确描述参数与返回值的接口(如BlogMapper.class)
* @param session
*/
public static void userMapper(SqlSession session)
{
Blog blog = new Blog();
blog.setTitle("nothing title");
blog.setId(1);
blog.setAuthorId(1);
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog1 = blogMapper.selectBlog_by_id(1);
pringBlog(blog1);
blogMapper.updateBlog_use_bean(blog);
blog1 = blogMapper.selectBlog_by_id(1);
pringBlog(blog1);
}
/**
* 查询返回1条博客记录
* @param blog
*/
public static void printBlogAuthor(Blog blog)
{
System.out.println("ID:" + blog.getId());
System.out.println("title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthor().getId());
System.out.println("authorName:" + blog.getAuthor().getUsername());
System.out.println("authorPassword:" + blog.getAuthor().getPassword());
System.out.println("authorEmail:" + blog.getAuthor().getEmail());
System.out.println("authorBio:" + blog.getAuthor().getBio());
}
/**
* 查询返回N条博客记录
* @param blogList
*/
public static void printBlogAuthorList(List<Blog> blogList)
{
for (Blog blog : blogList)
{
System.out.println("===========================");
System.out.println("ID:" + blog.getId());
System.out.println("title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthor().getId());
System.out.println("authorName:" + blog.getAuthor().getUsername());
System.out.println("authorPassword:" + blog.getAuthor().getPassword());
System.out.println("authorEmail:" + blog.getAuthor().getEmail());
System.out.println("authorBio:" + blog.getAuthor().getBio());
}
}
/**
* 使用Collection元素 Collection元素用来处理“一对多”的数据模型
* @param blogList
*/
public static void printBlogPosts(List<Blog> blogList)
{
for (Blog blog : blogList)
{
System.out.println("\n===========================");
System.out.println("ID:" + blog.getId());
System.out.println("blog_title:" + blog.getTitle());
System.out.println("authorID:" + blog.getAuthorId());
System.out.println("===========posts=============");
for (Post post : blog.getPosts())
{
System.out.println("subject:" + post.getSubject());
System.out.println("section:" + post.getSection());
System.out.println("body:" + post.getBody());
}
}
}
}
SqlMapperManager类
package org.mybatis.service;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlMapperManager {
private static SqlSessionFactory factory = null;
private static String fileName = "Sqlconfig.xml";
private SqlMapperManager()
{
}
public static void initMapper(String sqlMapperFileName)
{
fileName = sqlMapperFileName;
}
public static SqlSessionFactory getFactory()
{
try
{
if (factory == null)
{
Reader reader = Resources
.getResourceAsReader(fileName);
SqlSessionFactoryBuilder builder =
new SqlSessionFactoryBuilder();
factory = builder.build(reader);
builder = null;
}
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
return factory;
}
}
相关文章推荐
- extJs学习基础5 理解mvvm的一个小案例
- vuejs基础学习,案例
- java 基础学习-05 io流学习案例
- hadoop学习笔记4 在学习笔记3基础上增加案例测试
- Coursera 机器学习课程 机器学习基础:案例研究 证书
- IBatis.net学习笔记_基础配置
- 黑马程序员——基础学习(九)String的实际案例及StringBuffer/StringBuilder
- Python基础语法学习--函数+案例--定义一个函数,实现两个数的四则运算
- java基础学习日志--异常案例
- 强化学习之最基础篇(算法实现及基础案例学习)
- 学习C#基础必看案例
- 个人学习安卓基础的案例逻辑-数据存储
- JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)
- Spring学习基础---一个简单的配置案例
- PHP基础学习代码案例
- java基础学习_集合类03_用户登录注册案例(集合版)、Set集合、Collection集合总结_day17总结
- ibatis基础语法学习(一)
- java基础学习日志--Stirng内存案例
- 学习爬虫基础5-一个简单的小案例