package com.hc.domain;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
// 多对多:一个用户可以拥有多个账户
private List accounts;
// 多对多:一个用户可以赋予多个角色
private List roles;
public User() {
}
public User(Integer id, String username, Date birthday, String sex, String address) {
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public List getAccounts() {
return accounts;
}
public void setAccounts(List accounts) {
this.accounts = accounts;
}
public List getRoles() {
return roles;
}
public void setRoles(List roles) {
this.roles = roles;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + ''' +
", birthday=" + birthday +
", sex='" + sex + ''' +
", address='" + address + ''' +
", accounts=" + accounts +
", roles=" + roles +
'}';
}
}
package com.hc.dao;
import com.hc.domain.QueryVo;
import com.hc.domain.User;
import java.util.List;
public interface UserDao {
User findOneById(Integer id);
List findAllByName(String username);
List findAllByCondition(User user);
List findAllByQueryVo(QueryVo queryVo);
List findAllAndAccount();
List findAllAndRole();
List findAll();
int findTotal();
void insertOne(User user);
void updateOne(User user);
void deleteOne(Integer id);
}
3.4 UserDao.xml
select *
from user
3.5 测试
import com.hc.dao.UserDao;
import com.hc.domain.QueryVo;
import com.hc.domain.User;
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.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class testMybatis {
private InputStream in;
private SqlSessionFactoryBuilder builder;
private SqlSessionFactory factory;
private SqlSession session;
private UserDao userDao;
@Before
public void init() throws Exception {
// 1.从 XML 中构建 SqlSessionFactory
in = Resources.getResourceAsStream("SqlMapConfig.xml");
builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
// 2.使用SqlSessionFactory生产SqlSession对象
session = factory.openSession(true);
// 3.使用SqlSession创建dao接口的代理对象
userDao = session.getMapper(UserDao.class);
}
@After
public void destroy() throws Exception {
// 关闭资源
session.close();
in.close();
}
@Test
public void testFindOneById() throws Exception {
User user = userDao.findOneById(49);
// 关闭SqlSession和清除SqlSession的缓存都会重新进行数据库的查询
// session.close();
// session.commit();
session.clearCache();
User user01 = userDao.findOneById(49);
// true说明该用户是同一个用户
System.out.println(user == user01);
}
@Test
public void testFindAllByName() throws Exception {
List users = userDao.findAllByName("覃");
for (User u : users) {
System.out.println(u);
}
}
@Test
public void testFindAllByCondition() throws Exception {
User user = new User(null, "HC", new Date(), "男", "湖南岳阳");
List users = userDao.findAllByCondition(user);
for (User u : users) {
System.out.println(u);
}
}
@Test
public void testFindAllByQueryVo() throws Exception {
QueryVo queryVo = new QueryVo();
List list = new ArrayList<>();
list.add(41);
list.add(42);
queryVo.setIds(list);
List users = userDao.findAllByQueryVo(queryVo);
for (User u : users) {
System.out.println(u);
}
}
@Test
public void testFindAllAndAccount() throws Exception {
List users = userDao.findAllAndAccount();
for (User u : users) {
System.out.println(u);
}
}
@Test
public void testFindAllAndRole() throws Exception {
List users = userDao.findAllAndRole();
for (User u : users) {
System.out.println(u);
}
}
@Test
public void testFindAll() throws Exception {
List users = userDao.findAll();
for (User u : users) {
System.out.println(u);
}
}
@Test
public void testFindTotal() throws Exception {
System.out.println(userDao.findTotal());
}
@Test
public void testInsertOne() {
User user = new User(null, "HC", new Date(), "男", "湖南岳阳");
System.out.println("添加用户前:" + user.toString());
userDao.insertOne(user);
session.commit(); // 提交事务
System.out.println("添加用户后:" + user.toString());
}
@Test
public void testUpdateOne() {
User user = new User(49, "覃杰", new Date(), "男", "湖北恩施");
userDao.updateOne(user);
session.commit();
}
@Test
public void testDeleteOne() {
userDao.deleteOne(48);
session.commit();
}
@Test
public void testTwoCache() {
SqlSession session1 = factory.openSession();
UserDao userDao1 = session1.getMapper(UserDao.class);
User user01 = userDao1.findOneById(49);
session1.clearCache();
SqlSession session2 = factory.openSession();
UserDao userDao2 = session1.getMapper(UserDao.class);
User user02 = userDao2.findOneById(49);
session2.clearCache();
// 尽管使用了二级缓存,但是这二者也不是同一个对象,因为从SqlSessionFactory拿出的数据创建一个新的对象返回
System.out.println(user01 == user02);
}
}