文章目录
- 一、 查询所有
- 1.Dao层接口
- 2.Dao层实现类
- 3.测试
- 二、 插入用户
- 1.Dao层接口
- 2.Dao层实现类
- 3.测试
- 三、 刪除用户
- 1.Dao层接口
- 2.Dao层实现类
- 3.测试
- 四、 更新用户
- 1.Dao层接口
- 2.Dao层实现类
- 3.测试
- 五、 查询一个用户
- 1.Dao层接口
- 2.Dao层实现类
- 3.测试
- 六、 根据名称模糊查询
- 1.Dao层接口
- 2.Dao层实现类
- 3.测试
- 七、 聚合函数查询总数
- 1.Dao层接口
- 2.Dao层实现类
- 3.测试
- 八、流程分析
一、 查询所有
1.Dao层接口
package com.zyx.core.dao;
import com.zyx.core.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 查询所有用户信息
*
* @return
*/
List<User> findAll();
}
2.Dao层实现类
package com.zyx.core.Impl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory ;
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public List<User> findAll() {
// 1.根据factory获取SqlSession对象
SqlSession sqlSession = factory.openSession();
// 2.调用sqlSession中的方法实现查询列表
// sqlSession.selectList()
// 参数就是获取映射配置的key --- 定位sql语句信息 => namespace + id
List<User> userList = sqlSession.selectList("com.zyx.core.dao.IUserDao.findAll");
// 3.释放资源
sqlSession.close();
return userList;
}
}
3.测试
package com.zyx.core.test;
import com.zyx.core.Impl.IUserDaoImpl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.io.Resources;
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.List;
public class MyBatisImplTest {
InputStream in = null;
IUserDao userDao;
/**
* 初始化方法
*/
@Before // 用于在测试方法执行之前执行
public void init() {
try {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.利用工厂获取dao对象
userDao = new IUserDaoImpl(factory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@After // 用于在测试方法指定之后执行
public void destroy() {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test_findAll() {
try {
// 1.执行查询所有方法
List<User> list = userDao.findAll();
for (User u : list) {
System.out.println(u);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
区别:
- 使用实现类的方式实现Mybaits操作,相对于利用代理对象方式代码量较大,只需要注意下面的变化即可~
注意点:
sqlSession.selectList("com.zyx.core.dao.IUserDao.findAll");
在利用sqlSession进行操作的时候,参数就是获取映射配置的key — 即用于定位sql语句信息 => namespace + id
返回顶部
二、 插入用户
1.Dao层接口
package com.zyx.core.dao;
import com.zyx.core.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 保存用户
*
* @param user
*/
void saveUser(User user);
}
2.Dao层实现类
package com.zyx.core.Impl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory ;
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public void saveUser(User user) {
// 1.根据factory获取SqlSession对象
SqlSession sqlSession = factory.openSession();
// 2.调用sqlSession中的方法实现查询列表
// 参数就是获取映射配置的key --- 定位sql语句信息 => namespace + id,指定插入目标对象user
sqlSession.insert("com.zyx.core.dao.IUserDao.saveUser",user);
// 3.提交事务
sqlSession.commit();
// 4.释放资源
sqlSession.close();
}
}
3.测试
package com.zyx.core.test;
import com.zyx.core.Impl.IUserDaoImpl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.io.Resources;
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.List;
public class MyBatisImplTest {
InputStream in = null;
IUserDao userDao;
/**
* 初始化方法
*/
@Before // 用于在测试方法执行之前执行
public void init() {
try {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.利用工厂获取dao对象
userDao = new IUserDaoImpl(factory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@After // 用于在测试方法指定之后执行
public void destroy() {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test_saveUser() {
try {
// 1.执行查询所有方法
String str = "2018-03-11 12:45:00";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
User user = new User();
user.setUsername("Mary2");
user.setAddress("北京");
user.setSex("女");
user.setBirthday(simpleDateFormat.parse(str));
System.out.println("插入之前:"+user);
userDao.saveUser(user);
System.out.println("插入之后:"+user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回顶部
三、 刪除用户
1.Dao层接口
package com.zyx.core.dao;
import com.zyx.core.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 删除用户信息
* @param id
*/
void deleteUser(Integer id);
}
2.Dao层实现类
package com.zyx.core.Impl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory ;
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public void deleteUser(Integer id) {
// 1.根据factory获取SqlSession对象
SqlSession sqlSession = factory.openSession();
// 2.调用sqlSession中的方法实现查询列表
// 参数就是获取映射配置的key --- 定位sql语句信息 => namespace + id,指定刪除目标id
sqlSession.delete("com.zyx.core.dao.IUserDao.deleteUser",id);
// 3.提交事务
sqlSession.commit();
// 4.释放资源
sqlSession.close();
}
}
3.测试
package com.zyx.core.test;
import com.zyx.core.Impl.IUserDaoImpl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.io.Resources;
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.List;
public class MyBatisImplTest {
InputStream in = null;
IUserDao userDao;
/**
* 初始化方法
*/
@Before // 用于在测试方法执行之前执行
public void init() {
try {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.利用工厂获取dao对象
userDao = new IUserDaoImpl(factory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@After // 用于在测试方法指定之后执行
public void destroy() {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test_deleteUser() {
try {
// 删除用户
userDao.deleteUser(43);
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回顶部
四、 更新用户
1.Dao层接口
package com.zyx.core.dao;
import com.zyx.core.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 更新用户信息
*
* @param user
*/
void updateUser(User user);
}
2.Dao层实现类
package com.zyx.core.Impl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory ;
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public void updateUser(User user) {
// 1.根据factory获取SqlSession对象
SqlSession sqlSession = factory.openSession();
// 2.调用sqlSession中的方法实现查询列表
// 参数就是获取映射配置的key --- 定位sql语句信息 => namespace + id,指定更新的用户对象user
sqlSession.update("com.zyx.core.dao.IUserDao.updateUser",user);
// 3.提交事务
sqlSession.commit();
// 4.释放资源
sqlSession.close();
}
}
3.测试
package com.zyx.core.test;
import com.zyx.core.Impl.IUserDaoImpl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.io.Resources;
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.List;
public class MyBatisImplTest {
InputStream in = null;
IUserDao userDao;
/**
* 初始化方法
*/
@Before // 用于在测试方法执行之前执行
public void init() {
try {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.利用工厂获取dao对象
userDao = new IUserDaoImpl(factory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@After // 用于在测试方法指定之后执行
public void destroy() {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test_updateUser() {
try {
// 1.执行查询所有方法
String str = "2018-03-11 12:45:00";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
User user = new User();
user.setId(42);
user.setUsername("Jack Z");
user.setAddress("南京江宁");
user.setSex("男");
user.setBirthday(simpleDateFormat.parse(str));
iUserDao.updateUser(user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回顶部
五、 查询一个用户
1.Dao层接口
package com.zyx.core.dao;
import com.zyx.core.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 查询一个用户信息
* @param id
* @return
*/
User findById(Integer id);
}
2.Dao层实现类
package com.zyx.core.Impl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory ;
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public User findById(Integer id) {
// 1.根据factory获取SqlSession对象
SqlSession sqlSession = factory.openSession();
// 2.调用sqlSession中的方法实现查询列表
// 参数就是获取映射配置的key --- 定位sql语句信息 => namespace + id,指定查询单个用户的id
User user = sqlSession.selectOne("com.zyx.core.dao.IUserDao.findById",id);
// 3.提交事务
sqlSession.commit();
// 4.释放资源
sqlSession.close();
return user;
}
}
3.测试
package com.zyx.core.test;
import com.zyx.core.Impl.IUserDaoImpl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.io.Resources;
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.List;
public class MyBatisImplTest {
InputStream in = null;
IUserDao userDao;
/**
* 初始化方法
*/
@Before // 用于在测试方法执行之前执行
public void init() {
try {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.利用工厂获取dao对象
userDao = new IUserDaoImpl(factory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@After // 用于在测试方法指定之后执行
public void destroy() {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test_findById() {
try {
// 查询单个用户
User user = userDao.findById(48);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回顶部
六、 根据名称模糊查询
1.Dao层接口
package com.zyx.core.dao;
import com.zyx.core.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 根据名称模糊查询
* @param name
* @return
*/
List<User> findByName(String name);
}
2.Dao层实现类
package com.zyx.core.Impl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory ;
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public List<User> findByName(String name) {
// 1.根据factory获取SqlSession对象
SqlSession sqlSession = factory.openSession();
// 2.调用sqlSession中的方法实现查询列表
// 参数就是获取映射配置的key --- 定位sql语句信息 => namespace + id;指定模糊查詢的条件name
List<User> userList = sqlSession.selectList("com.zyx.core.dao.IUserDao.findByName",name);
// 3.释放资源
sqlSession.close();
return userList;
}
}
3.测试
package com.zyx.core.test;
import com.zyx.core.Impl.IUserDaoImpl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.io.Resources;
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.List;
public class MyBatisImplTest {
InputStream in = null;
IUserDao userDao;
/**
* 初始化方法
*/
@Before // 用于在测试方法执行之前执行
public void init() {
try {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.利用工厂获取dao对象
userDao = new IUserDaoImpl(factory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@After // 用于在测试方法指定之后执行
public void destroy() {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test_findByName() {
try {
// 模糊查询
List<User> userList = userDao.findByName("M%");
for (User user:userList){
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回顶部
七、 聚合函数查询总数
1.Dao层接口
package com.zyx.core.dao;
import com.zyx.core.domain.User;
import java.util.List;
/**
* 用户持久层接口
*/
public interface IUserDao {
/**
* 聚合函数查询总数
* @return
*/
int findTotal();
}
2.Dao层实现类
package com.zyx.core.Impl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
public class IUserDaoImpl implements IUserDao {
private SqlSessionFactory factory ;
public IUserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public int findTotal() {
// 1.根据factory获取SqlSession对象
SqlSession sqlSession = factory.openSession();
// 2.调用sqlSession中的方法实现查询列表
// 参数就是获取映射配置的key --- 定位sql语句信息 => namespace + id;指定模糊查詢的条件name
Integer count = sqlSession.selectOne("com.zyx.core.dao.IUserDao.findTotal");
// 3.释放资源
sqlSession.close();
return count;
}
}
3.测试
package com.zyx.core.test;
import com.zyx.core.Impl.IUserDaoImpl;
import com.zyx.core.dao.IUserDao;
import com.zyx.core.domain.User;
import org.apache.ibatis.io.Resources;
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.List;
public class MyBatisImplTest {
InputStream in = null;
IUserDao userDao;
/**
* 初始化方法
*/
@Before // 用于在测试方法执行之前执行
public void init() {
try {
// 1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.利用工厂获取dao对象
userDao = new IUserDaoImpl(factory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放资源
*/
@After // 用于在测试方法指定之后执行
public void destroy() {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test_findTotal() {
try {
// 统计总条数
Integer count = userDao.findTotal();
System.out.println("共有记录"+count+"条!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回顶部