一、pom配置
junit
junit
4.12
test
mysql
mysql-connector-java
8.0.12
log4j
log4j
1.2.17
org.mybatis
mybatis
3.4.6
log4j.properties配置
log4j.rootLogger=info,appender1,appender2
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=D:/logFile.txt
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
jdbc.properties配置
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/david?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
nybatis-config.properties
二、包结构
包名 | 类名 |
com.zed.utils | 工具类,封装SqlSessionFactory;SqlSessionFactoryUtil.class |
com.zed.service | 业务类,测试操作类,testUser.class |
com.zed.domain | 实体类,列出字段,获得getter\setter方法,重写toString()方法 |
com.zed.mappers | 映射类,包含映射文件和映射类;userMapper.class,userMapper.xml |
三、业务操作
SqlSessionFactoryUtil.java
package com.zed.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory;
public static SqlSessionFactory getSqlSessionFactory(){
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
if(sqlSessionFactory == null){
sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sqlSessionFactory;
}
public static SqlSession openSession(){
return getSqlSessionFactory().openSession();
}
}
User.java
package com.zed.domain;
import java.util.Arrays;
public class User {
private int id;
private String name;
private int age;
private String phone;
private String email;
private byte[] pic;
private String remark;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
public String getPhone() {return phone;}
public void setPhone(String phone) {this.phone = phone;}
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
public byte[] getPic() {return pic;}
public void setPic(byte[] pic) {this.pic = pic;}
public String getRemark() {return remark;}
public void setRemark(String remark) {this.remark = remark;}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", phone=" + phone + ", email=" + email + ", pic="
+ Arrays.toString(pic) + ", remark=" + remark + "]";
}
}
1、UserMapper.java配合UserMapper.xml
package com.zed.mappers;
import java.util.List;
import com.zed.domain.User;
public interface UserMapper {
/**
* 添加用户
* @param user
* @return
*/
public int addUser(User user);
/**
* 查询用户
* @return
*/
public List findUsers();
/**
* 根据ID查询用户ID
* @param id
* @return
*/
public User findUserById(int id);
/**
* 根据ID删除用户
* @param id
* @return
*/
public int deleteUserById(int id);
/**
* 更新用户
* @param user
* @return
*/
public int updateUser(User user);
}
insert into user values(null,#{name},#{age},#{phone},#{email})
delete from user where id=#{id}
update user set name=#{name},age=#{age},phone=#{phone},email=#{email}
UserTest.java测试类
package com.zed.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.util.SqlSessionFactoryUtil;
public class UserTest1 {
private static Logger logger=Logger.getLogger(UserTest1.class);
private SqlSession sqlSession=null;
private UserMapper userMapper=null;
@Before
public void setUp() throws Exception {
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void tearDown() throws Exception {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testAdd(){
// TODO Auto-generated method stub
logger.info("添加用户");
User user=new User("zedeach",34,"14356756784","[email protected]");
int result=userMapper.addUser(user);
sqlSession.commit();
if(result>0){
logger.info("添加成功");
}
}
@Test
public void testDeleteById(){
logger.info("根据id删除用户");
int result=userMapper.deleteUserById(6);
sqlSession.commit();
if(result==1){
logger.info("删除成功");
}
}
@Test
public void testUpdate(){
logger.info("修改用户");
User user=new User(1,"zaner",26,"15865235842","[email protected]");
int result=userMapper.updateUser(user);
sqlSession.commit();
if(result>0){
logger.info("修改成功");
}
}
@Test
public void testFindAll(){
logger.info("查找所有用户");
List users=userMapper.findUsers();
sqlSession.commit();
if(!users.isEmpty()){
for (User user : users) {
System.out.println(user);
}
logger.info("查询用户成功");
}
}
@Test
public void testFindById(){
logger.info("根据ID查询用户");
User user=userMapper.findUserById(2);
sqlSession.commit();
logger.info(user.getId()+user.getName()+user.getAge()+user.getPhone()+user.getEmail());
if(user!=null){
logger.info("查询用户成功");
}
}
}
2、关联查询:一对一查询(用户对地址)
User.java
package com.zed.domain;
public class User {
private int id;
private String name;
private int age;
private String phone;
private String email;
private Address address;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
public String getPhone() {return phone;}
public void setPhone(String phone) {this.phone = phone;}
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
public Address getAddress() {return address;}
public void setAddress(Address address) {this.address = address;}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age
+ ", phone=" + phone + ", email=" + email + ", address="
+ address + "]";
}
}
Address.java
package com.zed.domain;
public class Address{
private int id;
private String name;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
@Override
public String toString() {
return "Address [id=" + id + ", name=" + name + "]";
}
}
AddressMapper.java
package com.zed.mappers;
import com.zed.domain.Address;
import com.zed.domain.User;
public interface AddressMapper {
/**
* 查詢用戶和相關地址
* @param id
* @return
*/
Address findById(int id);
}
AddressMapper.xml
UserMapper.java
package com.zed.mappers;
import com.zed.domain.User;
public interface UserMapper {
/**
* 查詢用戶和相關地址
* @param id
* @return
*/
User selectUserAndAddress(int id);
}
UserMapper.xml
测试类
package com.zed.service;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.util.SqlSessionFactoryUtil;
public class UserTest {
private static Logger logger=Logger.getLogger(UserTest.class);
private SqlSession sqlSession = null;
private UserMapper userMapper = null;
@Before
public void setUp() throws Exception{
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void tearDown() {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testFindUserWithDepart(){
logger.info("查詢用户带班级");
User user=userMapper.selectUserAndDepart(3);
sqlSession.commit();
System.out.println(user);
}
}
3、关联查询:一对多,多对一查询(用户对部门)
Depart.java
package com.zed.domain;
import java.util.List;
public class Depart {
private int id;
private String name;
private List users;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public List getUsers() {return users;}
public void setUsers(List users) {this.users = users;}
@Override
public String toString() {
return "Depart [id=" + id + ", name=" + name + ", users=" + users + "]";
}
}
User.java
package com.zed.domain;
public class User {
private int id;
private String name;
private int age;
private String phone;
private String email;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
public String getPhone() {return phone;}
public void setPhone(String phone) {this.phone = phone;}
public String getEmail() {return email;}
public void setEmail(String email) {this.email = email;}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age
+ ", phone=" + phone + ", email=" + email + "]";
}
}
DepartMapper.java
package com.zed.mappers;
import com.zed.domain.Depart;
public interface DepartMapper {
Depart findDepartById(int id);
}
UserMapper.java
package com.zed.mappers;
import java.util.List;
import com.zed.domain.User;
public interface UserMapper {
List findUsersWithDepartId(int depart_id);
}
DepartMapper.xml
UserMapper.xml
DepartTest
package com.zed.service;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.Depart;
import com.zed.mappers.DepartMapper;
import com.zed.mappers.UserMapper;
import com.zed.util.SqlSessionFactoryUtil;
public class DepartTest {
private static Logger logger=Logger.getLogger(DepartTest.class);
private SqlSession sqlSession;
private DepartMapper departMapper;
@Before
public void setUp() {
// TODO Auto-generated method stub
sqlSession=new SqlSessionFactoryUtil().openSession();
departMapper=sqlSession.getMapper(DepartMapper.class);
}
@After
public void tearDown() {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testFindUserByDepartId(){
logger.info("通过查询部门查询用户");
Depart depart=departMapper.findDepartById(1);
sqlSession.commit();
System.out.println(depart);
}
}
4、动态SQL查询
1、if条件
2、choose、when和otherwise条件
3、where条件、自动加上where、如果where子句以and或者or开头,则自动删除第一个and或者or
4、trim条件、功能和where元素类似,提供了前缀 、后缀功能,更加灵活
5、foreach条件
6、set条件、自动加上set,自动剔除最后一个逗号","
User.java
UserMapper.java
package com.zed.mappers;
import java.util.List;
import java.util.Map;
import com.zed.domain.User;
public interface UserMapper {
List searchUserByIf(Map map);
List searchUserByChoose(Map map);
List searchUserByWhere(Map map);
List searchUserByTrim(Map map);
List searchUserByForeach(Map map);
int updateUser(User user);
}
UserMapper.xml
update user
name =#{name},
age =#{age},
phone =#{phone},
email =#{email},
where id = #{id}
UserTest.java
package com.zed.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
private static Logger logger=Logger.getLogger(UserTest.class);
private SqlSession sqlSession;
private UserMapper userMapper;
@Before
public void setUp() {
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void tearDown() {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testUserByIf(){
logger.info("使用if动态查询用户");
Map map=new HashMap();
/*map.put("name", "%张%");*/
map.put("age", 40);
List userList=userMapper.searchUserByIf(map);
for(User users:userList){
System.out.println(users);
}
sqlSession.commit();
}
@Test
public void testUserByChoose(){
logger.info("使用choose动态查询用户");
Map map=new HashMap();
map.put("condation", "id");
map.put("id", 1);
//choose
/* List condations=new ArrayList();
condations.add(1);
condations.add(2);*/
List userList=userMapper.searchUserByChoose(map);
for(User users:userList){
System.out.println(users);
}
sqlSession.commit();
}
@Test
public void testUserByWhere(){
logger.info("使用where动态查询用户");
Map map=new HashMap();
map.put("id",2);
List userList=userMapper.searchUserByWhere(map);
for(User users:userList){
System.out.println(users);
}
sqlSession.commit();
}
@Test
public void testUserByTrim(){
logger.info("使用trim动态查询用户");
Map map=new HashMap();
map.put("id",3);
List userList=userMapper.searchUserByTrim(map);
for(User users:userList){
System.out.println(users);
}
sqlSession.commit();
}
@Test
public void testUserByForeach(){
logger.info("使用Foreach动态查询用户");
Map map=new HashMap();
List list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
map.put("ids",list);
List userList=userMapper.searchUserByTrim(map);
for(User users:userList){
System.out.println(users);
}
sqlSession.commit();
}
@Test
public void testUserByUpdateSet(){
logger.info("使用set动态更新用户");
User user = new User();
user.setId(2);
user.setName("猪八戒");
user.setAge(22);
int count=userMapper.updateUser(user);
if(count==1){
System.out.println("更新成功");
}
sqlSession.commit();
}
}
5、物理分页与逻辑分页查询
UserMapper.java
package com.zed.mappers;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import com.zed.domain.User;
public interface UserMapper {
/**
* 逻辑查询,缓存在内存进行分页,不推荐
* @param rowBounds
* @return
*/
List findByPage(RowBounds rowBounds);
/**
* 通过Map真正实现分页
* @param map
* @return
*/
List findByPageMap(Map map);
}
UserMapper.xml
UserPageTest
package com.zed.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
private static Logger logger=Logger.getLogger(UserTest.class);
private UserMapper userMapper;
private SqlSession sqlSession;
@Before
public void setUp() {
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void teadDown() {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testUserByPage(){
logger.info("逻辑分页查询用户,不推荐使用");
// offset 相当于每页大小;limit:每页数据
int offset=0,limit=6;
RowBounds rowBounds=new RowBounds(offset,limit);
List users=userMapper.findByPage(rowBounds);
for(User user:users){
System.out.println(user);
}
}
@Test
public void testUserByPageMap(){
logger.info("真正实现物理分页查询用户,不推荐使用");
Map map=new HashMap();
//start开始查询条数位置,size:查询条数
map.put("start", 0);
map.put("size", 6);
List users=userMapper.findByPageMap(map);
for(User user:users){
System.out.println(user);
}
}
}
6、开启缓存cache
Mybatis默认情况下,Mybatis启用一级缓存,即同一个SqlSession接口对象调用了相同的select语句,则直接会从缓存中返回结果,而不是在查询一次数据库,开发者可以自己配置二级缓存,二级缓存是全局的,默认情况下,select的使用缓存的,insert update delete是不适用缓存的
UserMapper.java
package com.zed.mappers;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import com.zed.domain.User;
public interface UserMapper {
/**
* 逻辑查询,缓存在内存进行分页,不推荐
* @param rowBounds
* @return
*/
List findByPage(RowBounds rowBounds);
/**
* 通过Map真正实现分页
* @param map
* @return
*/
List findByPageMap(Map map);
}
UserMapper.xml
UserTest.java
package com.zed.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
private static Logger logger=Logger.getLogger(UserTest.class);
private UserMapper userMapper;
private SqlSession sqlSession;
@Before
public void setUp() {
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void teadDown() {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testUserByPage(){
logger.info("逻辑分页查询用户,不推荐使用");
// offset 相当于每页大小;limit:每页数据
int offset=0,limit=6;
RowBounds rowBounds=new RowBounds(offset,limit);
List users=userMapper.findByPage(rowBounds);
for(User user:users){
System.out.println(user);
}
}
@Test
public void testUserByPageMap(){
logger.info("真正实现物理分页查询用户,不推荐使用");
Map map=new HashMap();
//start开始查询条数位置,size:查询条数
map.put("start", 0);
map.put("size", 6);
List users=userMapper.findByPageMap(map);
for(User user:users){
System.out.println(user);
}
}
}
7、注解查询
UserMapper.java
package com.zed.mappers;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.zed.doamin.User;
public interface UserMapper{
@Insert("insert into user values(null,#{name},#{age},#{phone},#{email},#{pic},#{remark})")
public int addUser(User user);
@Update("update user set name=#{name},age=#{age},phone=#{phone},email=#{email},pic=#{pic},remark=#{remark} where id=#{id}")
public int updateUser(User user);
@Delete("delete from user where id=#{id}")
public int deleteUser(int id);
@Select("select * from user where id=#{id}")
public Student getUserById(int id);
@Select("select * from user")
@Results(
{
@Result(id=true,column="id",property="id"),
@Result(column="name",property="name"),
@Result(column="age",property="age"),
@Result(column="phone",property="phone"),
@Result(column="email",property="email"),
@Result(column="pic",property="pic"),
@Result(column="remark",property="remark"),
}
)
public List findUsers();
}
UserTest.java
package com.zed.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
private static Logger logger=Logger.getLogger(UserTest.class);
private SqlSession sqlSession;
private UserMapper userMapper;
@Before
public void setUp() {
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void tearDown() {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testAddUser() {
logger.info("新增用户");
User user=new User();
user.setName("待删除用户");
user.setAge(34);
user.setPhone("16625489654");
user.setEmail("[email protected]");
File file=new File("D://pic1.jpg");
byte[] pic=null;
InputStream inputStream;
try {
inputStream=new FileInputStream(file);
pic=new byte[inputStream.available()];
inputStream.read(pic);
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setPic(pic);
user.setRemark("沉默加速度");
int count=userMapper.insertUser(user);
if(count==1) {
System.out.println("新增用户成功");
}
sqlSession.commit();
}
@Test
public void testUpdateUser() {
logger.info("更新用户");
User user=new User();
user.setId(8);
user.setName("雨辰");
user.setAge(42);
user.setPhone("16632562145");
user.setEmail("[email protected]");
File file =new File("D://pic2.jpg");
byte[] pic=null;
InputStream inputStream;
try {
inputStream=new FileInputStream(file);
pic=new byte[inputStream.available()];
inputStream.read(pic);
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setPic(pic);
user.setRemark("天地星辰诀");
int count=userMapper.updateUser(user);
if(count==1) {
System.out.println("更新用户成功");
}
sqlSession.commit();
}
@Test
public void testFindUserById() {
User user=userMapper.getUserById(1);
System.out.println(user);
sqlSession.commit();
}
@Test
public void testFindUsers() {
Map map=new HashMap();
map.put("id", 1);
// map.put("name", "李宇春");
List users=userMapper.findUsers(map);
for(User user:users) {
System.out.println(user);
}
sqlSession.commit();
}
@Test
public void testDeleteUser() {
int count=userMapper.deleteUser(10);
if(count==1) {
System.out.println("删除用户成功");
}
sqlSession.commit();
}
}
8、注解查询-动态查询
UserDynaSqlProvider.java
package com.zed.mappers;
import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
import com.zed.domain.User;
public class UserDynaSqlProvider {
/**
@Title: 新增用户
@Description: TODO
@param @param user
@param @return
@return String
@throws
*/
public String insertUser(final User user){
return new SQL(){
{
INSERT_INTO("user");
if(user.getName()!=null){
VALUES("name", "#{name}");
}
if(user.getAge()!=0){
VALUES("age", "#{age}");
}
if(user.getPhone()!=null){
VALUES("phone", "#{phone}");
}
if(user.getEmail()!=null){
VALUES("email", "#{email}");
}
if(user.getPic()!=null){
VALUES("pic", "#{pic}");
}
if(user.getRemark()!=null){
VALUES("remark", "#{remark}");
}
}
}.toString();
}
public String updateUser(final User user){
return new SQL(){
{
UPDATE("user");
if(user.getName()!=null){
SET("name=#{name}");
}
if(user.getAge()!=0){
SET("age=#{age}");
}
if(user.getPhone()!=null){
SET("phone=#{phone}");
}
if(user.getEmail()!=null){
SET("email=#{email}");
}
if(user.getPic()!=null){
SET("pic=#{pic}");
}
if(user.getRemark()!=null){
SET("remark=#{remark}");
}
WHERE("id=#{id}");
}
}.toString();
}
public String deleteUser(){
return new SQL(){
{
DELETE_FROM("user");
WHERE("id=#{id}");
}
}.toString();
}
public String getUserById(){
return new SQL(){
{
SELECT("*");
FROM("user");
WHERE("id=#{id}");
}
}.toString();
}
public String findUsers(final Map map){
return new SQL(){
{
SELECT("*");
FROM("user");
StringBuffer sb=new StringBuffer();
if(map.get("id")!=null){
sb.append(" and id ="+map.get("id"));
}
if(map.get("name")!=null){
sb.append(" and name like '"+map.get("name")+"'");
}
if(map.get("age")!=null){
sb.append(" and age="+map.get("age"));
}
if(map.get("phone")!=null){
sb.append("and phone= '"+map.get("phone")+"'");
}
if(map.get("email")!=null){
sb.append("and email='"+map.get("email")+"'");
}
if(map.get("pic")!=null){
sb.append("and pic="+map.get("pic"));
}
if(map.get("remark")!=null){
sb.append("and remark='"+map.get("remark")+"'");
}
if(!sb.toString().equals("")){
WHERE(sb.toString().replaceFirst("and", ""));
}
}
}.toString();
}
}
UserMapper.java
package com.zed.mappers;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import com.zed.domain.User;
public interface UserMapper {
@InsertProvider(type=UserDynaSqlProvider.class,method="insertUser")
int insertUser(User user);
@UpdateProvider(type=UserDynaSqlProvider.class,method="updateUser")
int updateUser(User user);
@DeleteProvider(type=UserDynaSqlProvider.class,method="deleteUser")
int deleteUser(int id);
@SelectProvider(type=UserDynaSqlProvider.class,method="getUserById")
User getUserById(int id);
@SelectProvider(type=UserDynaSqlProvider.class,method="findUsers")
List findUsers(Map map);
}
UserTest.java
package com.zed.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
private static Logger logger=Logger.getLogger(UserTest.class);
private SqlSession sqlSession;
private UserMapper userMapper;
@Before
public void setUp() {
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void tearDown() {
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testAddUser() {
logger.info("新增用户");
User user=new User();
user.setName("待删除用户");
user.setAge(34);
user.setPhone("16625489654");
user.setEmail("[email protected]");
File file=new File("D://pic1.jpg");
byte[] pic=null;
InputStream inputStream;
try {
inputStream=new FileInputStream(file);
pic=new byte[inputStream.available()];
inputStream.read(pic);
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setPic(pic);
user.setRemark("沉默加速度");
int count=userMapper.insertUser(user);
if(count==1) {
System.out.println("新增用户成功");
}
sqlSession.commit();
}
@Test
public void testUpdateUser() {
logger.info("更新用户");
User user=new User();
user.setId(8);
user.setName("雨辰");
user.setAge(42);
user.setPhone("16632562145");
user.setEmail("[email protected]");
File file =new File("D://pic2.jpg");
byte[] pic=null;
InputStream inputStream;
try {
inputStream=new FileInputStream(file);
pic=new byte[inputStream.available()];
inputStream.read(pic);
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setPic(pic);
user.setRemark("天地星辰诀");
int count=userMapper.updateUser(user);
if(count==1) {
System.out.println("更新用户成功");
}
sqlSession.commit();
}
@Test
public void testFindUserById() {
User user=userMapper.getUserById(1);
System.out.println(user);
sqlSession.commit();
}
@Test
public void testFindUsers() {
Map map=new HashMap();
map.put("id", 1);
// map.put("name", "李宇春");
List users=userMapper.findUsers(map);
for(User user:users) {
System.out.println(user);
}
sqlSession.commit();
}
@Test
public void testDeleteUser() {
int count=userMapper.deleteUser(10);
if(count==1) {
System.out.println("删除用户成功");
}
sqlSession.commit();
}
}
9、一对一、一对多、多对一注解开发
Depart.java
package com.zed.domain;
import java.util.List;
public class Depart {
private int id;
private String name;
private List users;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List getUsers() {
return users;
}
public void setUsers(List users) {
this.users = users;
}
@Override
public String toString() {
return "Depart [id=" + id + ", name=" + name + ", users=" + users + "]";
}
}
Region.java
package com.zed.domain;
public class Region {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Region [id=" + id + ", name=" + name + "]";
}
}
User.java
package com.zed.domain;
import java.util.Arrays;
public class User {
private int id;
private String name;
private int age;
private String phone;
private String email;
private byte[] pic;
private String remark;
private Region region;
private Depart depart;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public byte[] getPic() {
return pic;
}
public void setPic(byte[] pic) {
this.pic = pic;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Region getRegion() {
return region;
}
public void setRegion(Region region) {
this.region = region;
}
public Depart getDepart() {
return depart;
}
public void setDepart(Depart depart) {
this.depart = depart;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", phone=" + phone + ", email=" + email + ", pic="
+ Arrays.toString(pic) + ", remark=" + remark + ", region=" + region + ", depart=" + depart + "]";
}
}
DepartMapper.java
package com.zed.mappers;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import com.zed.domain.Depart;
public interface DepartMapper {
@Select("select * from depart where id=#{id}")
Depart findDepartById(int id);
@Select("select * from depart where id=#{id}")
@Results({
@Result(id=true,column="id",property="id"),
@Result(column="name",property="name"),
@Result(column="id",property="users",many=@Many(select="com.zed.mappers.UserMapper.findUserByDepartId")),
})
Depart findUserAndDepartById(int id);
}
RegionMapper.java
package com.zed.mappers;
import org.apache.ibatis.annotations.Select;
import com.zed.domain.Region;
public interface RegionMapper {
/**
* 通过ID查询region
* @param id
* @return
*/
@Select("select * from region where id=#{id}")
Region findRegionById(int id);
}
UserMapper.java
package com.zed.mappers;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.zed.domain.User;
public interface UserMapper {
/**
* @param user
* @return
*/
@Insert("insert into user values(null,#{name},#{age},#{phone},#{email},#{pic},#{remark},1,2)")
int addUser(User user);
/**
* @param id
* @return
*/
@Select("select * from user where id=#{id}")
User findUserById(int id);
/**
* @return
*/
@Select("select * from user")
@Results({
@Result(id=true,column="id",property="id"),
@Result(column="name",property="name"),
@Result(column="age",property="age"),
@Result(column="phone",property="phone"),
@Result(column="email",property="email"),
@Result(column="pic",property="pic"),
@Result(column="remark",property="remark")
})
List findUsers();
/**
* @param user
* @return
*/
@Update("update user set name=#{name},age=#{age},phone=#{phone},email=#{email},pic=#{pic},remark=#{remark} where id=#{id}")
int updateUser(User user);
/**
* @param id
* @return
*/
@Delete("delete from user where id=#{id}")
int deleteUserById(int id);
/**
* 查询用户和地址--一对一
* @param id
* @return
*/
@Select("select * from user where id=#{id}")
@Results({
@Result(id=true,column="id",property="id"),
@Result(column="name",property="name"),
@Result(column="age",property="age"),
@Result(column="phone",property="phone"),
@Result(column="email",property="email"),
@Result(column="pic",property="pic"),
@Result(column="remark",property="remark"),
@Result(column="region_id",property="region",one=@One(select="com.zed.mappers.RegionMapper.findRegionById")),
})
User findUserAndRegionByid(int id);
/**
* 查询用户,地址,部门,一对一
* @param id
* @return
*/
@Select("select * from user where id = #{id}")
@Results({
@Result(id=true,column="id",property="id"),
@Result(column="name",property="name"),
@Result(column="age",property="age"),
@Result(column="phone",property="phone"),
@Result(column="email",property="email"),
@Result(column="pic",property="pic"),
@Result(column="remark",property="remark"),
@Result(column="region_id",property="region",one=@One(select="com.zed.mappers.RegionMapper.findRegionById")),
@Result(column="depart_id",property="depart",one=@One(select="com.zed.mappers.DepartMapper.findDepartById")),
})
User findUserAndRegionAndDepartById(int id);
@Select("select * from user where depart_id=#{depart_id}")
@Results({
@Result(id=true,column="id",property="id"),
@Result(column="name",property="name"),
@Result(column="age",property="age"),
@Result(column="phone",property="phone"),
@Result(column="email",property="email"),
@Result(column="pic",property="pic"),
@Result(column="remark",property="remark"),
})
List findUserByDepartId(int depart_id);
}
UserTest.java
package com.zed.service;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.User;
import com.zed.mappers.UserMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class UserTest {
private static Logger logger=Logger.getLogger(UserTest.class);
private UserMapper userMapper;
private SqlSession sqlSession;
@Before
public void setUp() throws Exception {
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
userMapper=sqlSession.getMapper(UserMapper.class);
}
@After
public void tearDown() throws Exception{
// TODO Auto-generated method stub
sqlSession.close();
}
@Test
public void testAddUser() {
logger.info("添加带头像用户");
User user=new User();
user.setName("测试者");
user.setAge(5);
user.setPhone("04717912521");
user.setEmail("[email protected]");
user.setRemark("一代天骄");
File file=new File("D://pic.jpg");
byte[] pic = null;
InputStream inputStream;
try {
inputStream = new FileInputStream(file);
pic=new byte[inputStream.available()];
inputStream.read(pic);
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setPic(pic);
int count=userMapper.addUser(user);
if(count==1) {
System.out.println("添加用户成功");
}
sqlSession.commit();
}
@Test
public void testfindUserById() {
logger.info("查询带头像用户");
User user=userMapper.findUserById(2);
System.out.println(user);
sqlSession.commit();
}
@Test
public void testFindUsers() {
logger.info("查询所有带头像用户");
List users=userMapper.findUsers();
for(User user:users) {
System.out.println(user);
}
sqlSession.commit();
}
@Test
public void testUpdateUser() {
logger.info("更新用户");
User user=new User();
user.setId(5);
user.setName("林青霞");
user.setAge(36);
user.setPhone("04717912521");
user.setEmail("[email protected]");
user.setRemark("香港四大美女之一");
File file=new File("D://pic1.jpg");
byte[] pic=null;
InputStream inputStream;
try {
inputStream = new FileInputStream(file);
pic=new byte[inputStream.available()];
inputStream.read(pic);
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setPic(pic);
int count=userMapper.updateUser(user);
if(count==1) {
System.out.println("更新成功");
}
sqlSession.commit();
}
@Test
public void testDeleteUserById() {
int count=userMapper.deleteUserById(6);
if(count==1) {
System.out.println("删除成功");
}
sqlSession.commit();
}
@Test
public void testFindUserAndRegionById() {
logger.info("通过ID查询用户和地址");
User user=userMapper.findUserAndRegionByid(1);
System.out.println(user);
sqlSession.commit();
}
@Test
public void testFindUserAndRegionAndDepartById() {
logger.info("通过ID查询用户、地址、部门");
User user=userMapper.findUserAndRegionAndDepartById(1);
System.out.println(user);
sqlSession.commit();
}
}
DepartTest.java
package com.zed.service;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zed.domain.Depart;
import com.zed.mappers.DepartMapper;
import com.zed.utils.SqlSessionFactoryUtil;
public class DepartTest {
private static Logger logger=Logger.getLogger(DepartTest.class);
private DepartMapper departMapper;
private SqlSession sqlSession;
@Before
public void setUp() throws Exception{
// TODO Auto-generated method stub
sqlSession=SqlSessionFactoryUtil.openSession();
departMapper=sqlSession.getMapper(DepartMapper.class);
}
@After
public void tearDown() throws Exception {
// TODO Auto-generated method stub
sqlSession.commit();
}
@Test
public void testDepart() {
logger.info("查询用户和部门--一对多");
Depart depart=departMapper.findUserAndDepartById(1);
/* for(User user:userList) {
System.out.println(user);
}*/
System.out.println(depart);
sqlSession.commit();
}
}