基于Mybatis實現(xiàn)CRUD操作過程解析(xml方式)
1、環(huán)境搭建
1.1 表結(jié)構(gòu)
create table user ( id int primary key auto_increment, username varchar(20) not null, birthday date, sex char(1) default '男', address varchar(50) ); insert into user values (null, '孫悟空','1980-10-24','男','花果山水簾洞'); insert into user values (null, '白骨精','1992-11-12','女','白虎嶺白骨洞'); insert into user values (null, '豬八戒','1983-05-20','男','福臨山云棧洞'); insert into user values (null, '蜘蛛精','1995-03-22','女','盤絲洞');
1.2 創(chuàng)建項目
導(dǎo)入如下jar
- mybatis框架包
- 數(shù)據(jù)庫驅(qū)動包
- log4j日志包
- junit單元測試包
1.3 準(zhǔn)備配置文件
在src下準(zhǔn)備配置文件:sqlMapConfig.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>
<!--配置數(shù)據(jù)庫連接參數(shù)-->
<environments default="mybatis">
<environment id="mybatis">
<!--事務(wù)管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--配置數(shù)據(jù)源-->
<dataSource type="pooled">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
在 src 下準(zhǔn)備配置文件:log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
2-增刪改查源碼
1.1 執(zhí)行結(jié)果
1.2 User類代碼
import java.sql.Date;
/**
用戶實體類對象 */
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
1.3 UserMapper接口代碼
package com.vg.dao;
import com.vg.entity.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 數(shù)據(jù)訪問層接口:對用戶進行增刪改查操作
*/
public interface UserMapper {
/**
* 添加用戶
*/
int addUser(User user);
/**
* 根據(jù)id刪除用戶
*/
void deleteUser(Integer id);
/**
* 通過id修改用戶信息
*/
/**
* 修改用戶信息
*/
void updateUser(User user);
/**
* 查詢所有用戶
*/
List<User> findAllUsers();
/**
* 根據(jù)id查詢用戶
*/
User findUserById(int id);
/**
* 根據(jù)用戶名模糊查詢用戶
*/
List<User> findUsersByName(String username);
/**
* 根據(jù)姓名和性別查詢用戶數(shù)據(jù)(姓名使用模糊查詢)
*/
/**
* 根據(jù)用戶名稱模糊查詢用戶
*/
}
}
1.4 UserMapper.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">
<!--
映射的作用:一個映射文件就對應(yīng)一個接口,一個接口可以有多個映射文件,一般是一對一關(guān)系。
mapper標(biāo)簽的namespace屬性的作用:關(guān)聯(lián)接口,需要配置對應(yīng)接口的類全名字符串
-->
<mapper namespace="com.vg.dao.UserMapper">
<!-- 完成接口映射配置文件UserMapper.xml的編寫:這個映射文件就相當(dāng)于UserMapper接口實現(xiàn)類配置 -->
<!--select標(biāo)簽的作用:用來配置查詢要執(zhí)行的SQL語句
id屬性:關(guān)聯(lián)接口中的方法名
resultType屬性:設(shè)置方法返回的數(shù)據(jù)類型,如果是集合則配置集合元素的類型
-->
<select id="findAllUsers" resultType="User">
select * from user
</select>
<select id="findUserById" parameterType="int" resultType="User">
select * from user where id = #{id};
</select>
<select id="findUsersByName" parameterType="string" resultType="User">
select *from user where username like #{username}
</select>
<insert id="addUser" parameterType="user" >
insert into user values(null,#{username},#{birthday},#{sex},#{address});
</insert>
<update id="updateUser" parameterType="user">
update user set username = #{username},
birthday = #{birthday},sex = #{sex}, address = #{address}
where id = #{id}
</update>
<delete id="deleteUser" parameterType="integer">
delete from user where id = #{id}
</delete>
</mapper>
1.5 在主配置文件中加載接口映射文件
<mappers>
<!--mapper標(biāo)簽:一個該標(biāo)簽就配置一個接口映射文件
resource屬性:配置映射文件的路徑,路徑分隔符使用 / : com/vg/dao/UserMapper.xml
url:用于配置互聯(lián)網(wǎng)上的映射文件的路徑,比如:http://www.baidu.com/xxx.xml
-->
<!--<mapper resource="com/vg/dao/UserMapper.xml"></mapper>-->
<package name="com.vg.dao"/>
</mappers>
1.6 測試類代碼
package com.vg.test;
import com.vg.dao.UserMapper;
import com.vg.entity.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.BeforeClass;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Date;
import java.util.List;
/**
* 測試類
*/
public class TestUserMapper {
private static SqlSessionFactory sqlSessionFactory =null;
private SqlSession sqlSession =null;
private UserMapper userMapper =null;
// 該方法在所有測試方法執(zhí)行之前執(zhí)行1次
@BeforeClass
public static void init() throws Exception {
// 1. 通過Resources類,加載sqlMapConfig.xml,得到文件輸入流對
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 實例化會話工廠創(chuàng)建類SqlSessionFactoryBuilder對象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 3. 根據(jù)字節(jié)輸入流獲取SqlSessionFactory對象
sqlSessionFactory = builder.build(in);
}
// 該方法會在每個測試方法執(zhí)行之前執(zhí)行1次
@Before
public void before(){
// 4. 獲取SqlSession對象,等價連接對象
// true:事務(wù)自動提交,false:不自動提交,默認值
sqlSession = sqlSessionFactory.openSession();
// 5. 創(chuàng)建接口 實現(xiàn)類對象
userMapper = sqlSession.getMapper(UserMapper.class);
}
/**
* 測試方法:通過用戶名模糊查詢用戶
*/
@Test
public void testAddUser() throws Exception{
// 1. 獲得接口代理對象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 2. 創(chuàng)建User對象
User u = new User();
u.setUsername("如來佛祖111");
u.setBirthday(Date.valueOf("1980-01-20"));
u.setAddress("西天靈山");
u.setSex("男");
// 3. 保存用戶信息
int row = userMapper.addUser(u);
System.out.println("row = " + row);
// 4. 手動提交事務(wù)
sqlSession.commit();
}
/**
* 測試方法:通過用戶名模糊查詢用戶
*/
@Test
public void testFindUserByName() throws Exception{
List<User> userList = userMapper.findUsersByName("%精%");
for (User user : userList) {
System.out.println(user);
}
}
/**
* 測試方法:查詢所有用戶
*/
@Test
public void testFindAllUsers() throws Exception{
List<User> userList = userMapper.findAllUsers();
for (User user : userList) {
System.out.println(user);
}
}
/**
* 根據(jù)id查詢用戶
* @throws Exception
*/
@Test
public void testFindUserById()throws Exception{
// 6. 調(diào)用接口的方法根據(jù)id查詢用戶
User user = userMapper.findUserById(1);
System.out.println("user = " + user);
}
@Test
public void testUpdateUser()throws Exception{
// 創(chuàng)建用戶對象
User user = new User(
6,
"牛魔王",
Date.valueOf("1998-02-20"),
"妖",
"牛魔洞");
// 更新用戶
userMapper.updateUser(user);
// 提交事務(wù)
sqlSession.commit();
}
@Test
public void testDeleteUser()throws Exception{
// 1. 獲得接口代理對象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 2. 根據(jù)id刪除用戶
userMapper.deleteUser(6);
// 3. 提交事務(wù)
sqlSession.commit();
}
@After
public void after() {
// 7. 關(guān)閉會話,釋放資源。
sqlSession.close();
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Cloud?Hystrix?服務(wù)降級限流策略詳解
這篇文章主要為大家介紹了Spring?Cloud?Hystrix?服務(wù)降級限流策略詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
SpringBoot Security前后端分離登錄驗證的實現(xiàn)
這篇文章主要介紹了SpringBoot Security前后端分離登錄驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java中DTO與Entity拷貝轉(zhuǎn)換的方法小結(jié)
在?Java?開發(fā)中,DTO(Data?Transfer?Object)和?Entity(實體類)是常見的兩種數(shù)據(jù)模型,本文將介紹幾種常見的工具類和自定義方式來實現(xiàn)這種轉(zhuǎn)換,感興趣的可以了解下2025-02-02

