1.项目结构:
2.代码:
1.User.java,Article.java:两个用到的javabean
package com.mybatis.bean;
public class User {
private int id;
private String userName;
private String userAge;
private String userAddress;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
}
package com.mybatis.bean;
public class Article {
private int id;
private User user;
private String title;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
2.mybatis通过接口去执行CRUD,没有实现类,对应XML配置文件,实现接口方法:IUserOperation.java
package com.mybatis.service;
import java.util.List;
import com.mybatis.bean.Article;
import com.mybatis.bean.User;
public interface IUserOperation {
public User selectUserById(int id);
public List selectUsers(String userName);
public void addUser(User user);
public void updateUser(User user);
public void deleteUser(int id);
public List<Article> getUserArticles(int userid);
}
package com.mybatis.service;
import java.util.List;
import com.mybatis.bean.Article;
import com.mybatis.bean.User;
public interface IUserOperation {
public User selectUserById(int id);
public List selectUsers(String userName);
public void addUser(User user);
public void updateUser(User user);
public void deleteUser(int id);
public List<Article> getUserArticles(int userid);
}
3.对应配置文件User.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">
<!-- namespace="com.mybatis.bean.UserMapper com.mybatis.service.IUserOperation" -->
<!-- mapepr参数,namespace 对应接口 以下用到的 User 在Configuration.xml配置文件进行了匹配处理类-->
<mapper namespace="com.mybatis.service.IUserOperation" >
<!-- id 对应接口 方法名 parameterType传入参数类型 resultType返回值类型-->
<select id="selectUserById" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
<!-- 定义返回值集合对象 通过id引用 -->
<resultMap type="User" id="resultListUser">
<id column="id" property="id"/>
<result column="userName" property="userName"/>
<result column="userAge" property="userAge"/>
<result column="userAddress" property=" "/>
</resultMap>
<!--查询集合 传入string 返回map,上面声明的map-->
<select id="selectUsers" parameterType="string" resultMap="resultListUser">
select * from user where userName like #{userName}
</select>
<!-- useGeneratedKeys="true" keyProperty="id"绑定key列,自动创建 -->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(userName,userAge,userAddress)
values(#{userName},#{userAge},#{userAddress})
</insert>
<update id="updateUser" parameterType="User">
update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<!-- 多对一查询 注意 id和aid -->
<resultMap type="Article" id="resultUserArticleList">
<id property="id" column="aid"/>
<result property="title" column="title"/>
<result property="content" column="content"/>
<!-- association处理多对一的关系 多本书 一个作者 -->
<association property="user" javaType="User">
<id property="id" column="id"/>
<result column="userName" property="userName"/>
<result column="userAge" property="userAge"/>
<result column="userAddress" property="userAddress"/>
</association>
</resultMap>
<select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
select user.id,user.userAge,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article
where user.id=article.userid and user.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">
<!-- namespace="com.mybatis.bean.UserMapper com.mybatis.service.IUserOperation" -->
<!-- mapepr参数,namespace 对应接口 以下用到的 User 在Configuration.xml配置文件进行了匹配处理类-->
<mapper namespace="com.mybatis.service.IUserOperation" >
<!-- id 对应接口 方法名 parameterType传入参数类型 resultType返回值类型-->
<select id="selectUserById" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
<!-- 定义返回值集合对象 通过id引用 -->
<resultMap type="User" id="resultListUser">
<id column="id" property="id"/>
<result column="userName" property="userName"/>
<result column="userAge" property="userAge"/>
<result column="userAddress" property=" "/>
</resultMap>
<!--查询集合 传入string 返回map,上面声明的map-->
<select id="selectUsers" parameterType="string" resultMap="resultListUser">
select * from user where userName like #{userName}
</select>
<!-- useGeneratedKeys="true" keyProperty="id"绑定key列,自动创建 -->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(userName,userAge,userAddress)
values(#{userName},#{userAge},#{userAddress})
</insert>
<update id="updateUser" parameterType="User">
update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
<!-- 多对一查询 注意 id和aid -->
<resultMap type="Article" id="resultUserArticleList">
<id property="id" column="aid"/>
<result property="title" column="title"/>
<result property="content" column="content"/>
<!-- association处理多对一的关系 多本书 一个作者 -->
<association property="user" javaType="User">
<id property="id" column="id"/>
<result column="userName" property="userName"/>
<result column="userAge" property="userAge"/>
<result column="userAddress" property="userAddress"/>
</association>
</resultMap>
<select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
select user.id,user.userAge,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article
where user.id=article.userid and user.id=#{id}
</select>
</mapper>
4.Mybatis配置文件:Configuration.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>
<!--alias可选,默认为类名,type必须 -->
<typeAlias alias="User" type="com.mybatis.bean.User"/>
<typeAlias type="com.mybatis.bean.Article"/>
</typeAliases>
<!-- 配置数据库连接 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--导入mapper User.xml -->
<mappers>
<mapper resource="com/mybatis/bean/User.xml"/>
</mappers>
</configuration>
5.测试:UserTest.java:
package com.junit.test;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.Reader;
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 org.apache.naming.resources.Resource;
import org.junit.Before;
import org.junit.Test;
import com.mybatis.bean.Article;
import com.mybatis.bean.User;
import com.mybatis.service.IUserOperation;
public class UserTest {
private static SqlSessionFactory sqlSessionFactory ;
private static Reader reader;
static{
try {
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSessionFactory getSession(){
return sqlSessionFactory;
}
。。。。。
。。。。。
}
加载配置文件,获取sqlsessionfactory对象
@Test
public void test() {
SqlSession session = sqlSessionFactory.openSession();
/*User user = session.selectOne("com.mybatis.bean.UserMapper.selectUserById", 1);*/
IUserOperation userOperation=session.getMapper(IUserOperation.class);
User user = userOperation.selectUserById(1);
System.out.println(user.getUserAddress());
System.out.println(user.getUserName());
session.close();
}
通过session的getMapper(xxx.class)获取接口对象xxx,通过接口方法直接操作。
还有一种方式改User.xml的
namespace="com.mybatis.bean.UserMapper
再在test()中:直接获取 传入 包名.namespace.id + id
User user = session.selectOne("com.mybatis.bean.UserMapper.selectUserById", 1);
获取集合:
@Test
public void getUserList(){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class);
List<User> users = userOperation.selectUsers("%");
for(User user:users){
System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUserAddress());
}
} finally {
session.close();
}
}
添加:要commit
@Test
public void addUser(){
User user = new User();
user.setUserAddress("东京不热");
user.setUserName("藏进一空");
user.setUserAge("18");
SqlSession session= sqlSessionFactory.openSession();
IUserOperation userOperation = session.getMapper(IUserOperation.class);
userOperation.addUser(user);
session.commit();
System.out.println("当前增加的用户为:"+user.getId()+" "+user.getUserAddress());
session.close();
}
更新:先获取对象再修改保存,commit
@Test
public void update(){
SqlSession session = sqlSessionFactory.openSession();
IUserOperation userOperation = session.getMapper(IUserOperation.class);
User user = userOperation.selectUserById(2);
user.setUserName("巨像");
user.setUserAge("19");
user.setUserAddress("aaaaa");
userOperation.updateUser(user);
session.commit();
session.close();
}
删除:传id:
@Test
public void deleteUser(){
SqlSession session = sqlSessionFactory.openSession();
IUserOperation userOperation = session.getMapper(IUserOperation.class);
userOperation.deleteUser(12);
session.commit();
session.close();
}
获取多对一集合:传入user.id
@Test
public void getUserArticles(){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class);
List<Article> articles = userOperation.getUserArticles(1);
for(Article article:articles){
System.out.println(article.getTitle()+":"+article.getContent()+
":作者是:"+article.getUser().getUserName()+":地址:"+
article.getUser().getUserAddress());
}
} finally {
session.close();
}
}
}
3.总结:
1.创建mybatis配置文件:数据库连接、别名类匹配、以及导入之后创建的mapper XML
2.创建对象javabean,并根据需求配置javabean的mapper操作XML文件
3.创建操作接口,对应mapper内的 id、传入值名称和类型
4.通过加载配置文件获取sqlsessionfactory对象,在获取session,通过session.getMapper(xxx.class) 获取操作接口类对象xxx,通过接口方法直接执行CRUD.