文章目錄
- 一、 查詢所有
- 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();
}
}
}
傳回頂部