記錄Mybatis第二天(實現增刪改及一些標籤配置)
回顧:Mybatis的環境搭建流程
-
第一步:建立 maven 工程
-
第二步:匯入座標
-
第三步:編寫必要程式碼(實體類和持久層介面)
-
第四步:編寫 SqlMapConfig.xml
-
第五步:編寫對映配置檔案
-
第六步:編寫測試類
基於代理 Dao 實現 CRUD 操作
使用者的持久層介面IUserDao為:
public interface IUserDao {
/**
* 查詢所有使用者
* @return
*/
List<User> findAll();
/**
* 儲存使用者
* @param user
*/
void saveUser(User user);
/**
* 更新使用者
* @param user
*/
void updateUser(User user);
/**
* 根據Id刪除使用者
* @param userId
*/
void deleteUser(Integer userId);
/**
* 根據id查詢使用者資訊
* @param userId
* @return
*/
User findById(Integer userId);
/**
* 根據名稱模糊查詢使用者資訊
* @param username
* @return
*/
List<User> findByName(String username);
/**
* 查詢總使用者數
* @return
*/
int findTotal();
/**
* 根據queryVo中的條件查詢使用者
* @param vo
* @return
*/
List<User> findUserByVo(QueryVo vo);
}
定義使用者實體類user:
public class User implements Serializable {
private Integer userId;
private String userName;
private String userAddress;
private String userSex;
private Date userBirthday;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public Date getUserBirthday() {
return userBirthday;
}
public void setUserBirthday(Date userBirthday) {
this.userBirthday = userBirthday;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userAddress='" + userAddress + '\'' +
", userSex='" + userSex + '\'' +
", userBirthday=" + userBirthday +
'}';
}
}
IUerDao.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">
<mapper namespace="com.itheima.dao.IUserDao">
<!-- 配置 查詢結果的列名和實體類的屬性名的對應關係 -->
<resultMap id="userMap" type="uSeR">
<!-- 主鍵欄位的對應 -->
<id property="userId" column="id"></id>
<!--非主鍵欄位的對應-->
<result property="userName" column="username"></result>
<result property="userAddress" column="address"></result>
<result property="userSex" column="sex"></result>
<result property="userBirthday" column="birthday"></result>
</resultMap>
<!-- 查詢所有 -->
<select id="findAll" resultMap="userMap">
<!--select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;-->
select * from user;
</select>
<!-- 儲存使用者 -->
<insert id="saveUser" parameterType="user">
<!-- 配置插入操作後,獲取插入資料的id -->
<selectKey keyProperty="userId" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday});
</insert>
<!-- 更新使用者 -->
<update id="updateUser" parameterType="USER">
update user set username=#{userName},address=#{userAddress},sex=#{userAex},birthday=#{userBirthday} where id=#{userId}
</update>
<!-- 刪除使用者-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{uid}
</delete>
<!-- 根據id查詢使用者 -->
<select id="findById" parameterType="INT" resultMap="userMap">
select * from user where id = #{uid}
</select>
<!-- 根據名稱模糊查詢 -->
<select id="findByName" parameterType="string" resultMap="userMap">
select * from user where username like #{name}
<!-- select * from user where username like '%${value}%'-->
</select>
<!-- 獲取使用者的總記錄條數 -->
<select id="findTotal" resultType="int">
select count(id) from user;
</select>
<!-- 根據queryVo的條件查詢使用者 -->
<select id="findUserByVo" parameterType="com.itheima.domain.QueryVo" resultMap="userMap">
select * from user where username like #{user.username}
</select>
</mapper>
其中需要關注的是:resultmap標籤的使用,使用該標籤可以使user類屬性與資料庫列名產生對應關係,可以不完全一樣,從而把resulttype=全限定類名替換為resultmap=id。
<resultMap id="userMap" type="uSeR">
<!-- 主鍵欄位的對應 -->
<id property="userId" column="id"></id>
<!--非主鍵欄位的對應-->
<result property="userName" column="username"></result>
<result property="userAddress" column="address"></result>
<result property="userSex" column="sex"></result>
<result property="userBirthday" column="birthday"></result>
</resultMap>
而其中parametertype標籤為什麼無需使用全限定類名呢?
- 是因為在SqlMapConfig中配置了標籤,使
com.itheima.domain包下所有的類都起了別名,別名為類名,且不區分大小寫。
<typeAliases>
<!--typeAlias用於配置別名。type屬性指定的是實體類全限定類名。alias屬性指定別名,當指定了別名就再區分大小寫
<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>-->
<!-- 用於指定要配置別名的包,當指定之後,該包下的實體類都會註冊別名,並且類名就是別名,不再區分大小寫-->
<package name="com.itheima.domain"></package>
</typeAliases>
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>
<!-- 配置properties
可以在標籤內部配置連線資料庫的資訊。也可以通過屬性引用外部配置檔案資訊
resource屬性: 常用的
用於指定配置檔案的位置,是按照類路徑的寫法來寫,並且必須存在於類路徑下。
url屬性:
是要求按照Url的寫法來寫地址
URL:Uniform Resource Locator 統一資源定位符。它是可以唯一標識一個資源的位置。
它的寫法:
http://localhost:8080/mybatisserver/demo1Servlet
協議 主機 埠 URI
URI:Uniform Resource Identifier 統一資源識別符號。它是在應用中可以唯一定位一個資源的。
-->
<properties url="file:///D:/IdeaProjects/day02_eesy_01mybatisCRUD/src/main/resources/jdbcConfig.properties">
<!-- <property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>-->
</properties>
<!--使用typeAliases配置別名,它只能配置domain中類的別名 -->
<typeAliases>
<!--typeAlias用於配置別名。type屬性指定的是實體類全限定類名。alias屬性指定別名,當指定了別名就再區分大小寫
<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>-->
<!-- 用於指定要配置別名的包,當指定之後,該包下的實體類都會註冊別名,並且類名就是別名,不再區分大小寫-->
<package name="com.itheima.domain"></package>
</typeAliases>
<!--配置環境-->
<environments default="mysql">
<!-- 配置mysql的環境-->
<environment id="mysql">
<!-- 配置事務 -->
<transactionManager type="JDBC"></transactionManager>
<!--配置連線池-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<!-- 配置對映檔案的位置 -->
<mappers>
<!--<mapper resource="com/itheima/dao/IUserDao.xml"></mapper>-->
<!-- package標籤是用於指定dao介面所在的包,當指定了之後就不需要在寫mapper以及resource或者class了 -->
<package name="com.itheima.dao"></package>
</mappers>
</configuration>
最後的測試類MybatiTest.java為:
public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before//用於在測試方法執行之前執行
public void init()throws Exception{
//1.讀取配置檔案,生成位元組輸入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.獲取SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.獲取SqlSession物件
sqlSession = factory.openSession();
//4.獲取dao的代理物件
userDao = sqlSession.getMapper(IUserDao.class);
}
@After//用於在測試方法執行之後執行
public void destroy()throws Exception{
//提交事務
sqlSession.commit();
//6.釋放資源
sqlSession.close();
in.close();
}
/**
* 測試查詢所有
*/
@Test
public void testFindAll(){
//5.執行查詢所有方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
}
/**
* 測試儲存操作
*/
@Test
public void testSave(){
User user = new User();
user.setUserName("modify User property");
user.setUserAddress("北京市順義區");
user.setUserSex("男");
user.setUserBirthday(new Date());
System.out.println("儲存操作之前:"+user);
//5.執行儲存方法
userDao.saveUser(user);
System.out.println("儲存操作之後:"+user);
}
/**
* 測試更新操作
*/
@Test
public void testUpdate(){
User user = new User();
user.setUserId(50);
user.setUserName("mybastis update user");
user.setUserAddress("北京市順義區");
user.setUserSex("女");
user.setUserBirthday(new Date());
//5.執行儲存方法
userDao.updateUser(user);
}
/**
* 測試刪除操作
*/
@Test
public void testDelete(){
//5.執行刪除方法
userDao.deleteUser(48);
}
/**
* 測試刪除操作
*/
@Test
public void testFindOne(){
//5.執行查詢一個方法
User user = userDao.findById(50);
System.out.println(user);
}
/**
* 測試模糊查詢操作
*/
@Test
public void testFindByName(){
//5.執行查詢一個方法
List<User> users = userDao.findByName("%王%");
// List<User> users = userDao.findByName("王");
for(User user : users){
System.out.println(user);
}
}
/**
* 測試查詢總記錄條數
*/
@Test
public void testFindTotal(){
//5.執行查詢一個方法
int count = userDao.findTotal();
System.out.println(count);
}
/**
* 測試使用QueryVo作為查詢條件
*/
@Test
public void testFindByVo(){
QueryVo vo = new QueryVo();
User user = new User();
user.setUserName("%王%");
vo.setUser(user);
//5.執行查詢一個方法
List<User> users = userDao.findUserByVo(vo);
for(User u : users){
System.out.println(u);
}
}
}
其中還有個使用QueryVo類為查詢條件的QueryVo類為:
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
相關文章
- Mybatis-plus實現簡單增刪改查MyBatis
- MyBatis框架搭建及增刪改查操作MyBatis框架
- 第一個mybatis程式,實現增刪改查CRUDMyBatis
- mybatis實現MySQL資料庫的增刪改查MyBatisMySql資料庫
- Mybatis 學習筆記(二)——原生DAO實現資料增刪改查MyBatis筆記
- Mybatis的增刪改查MyBatis
- mybatis中的增刪改操作MyBatis
- SpringBoot+Mybatis增刪改查實戰Spring BootMyBatis
- MyBatis初級實戰之二:增刪改查MyBatis
- IDEA SpringBoot-Mybatis-plus 實現增刪改查(CRUD)IdeaSpring BootMyBatis
- (一)Mybatis基本配置,Statement方式,動態代理增刪改查MyBatis
- Spring+SpringMVC+Mybatis實現增刪改查--(七)總結篇SpringMVCMyBatis
- 第一天——Mybatis增刪改MyBatis
- 一個系列搞定MyBatis:MyBatis快速上手增刪改查MyBatis
- 運用layui實現增刪改查UI
- js實現表格的增刪改查JS
- oracle儲存過程詳解--遊標 實現增、刪、改、查Oracle儲存過程
- MyBatis實現MySQL表欄位及結構的自動增刪MyBatisMySql
- Hibernate對單條記錄的增刪改查
- 使用mybatis開發的增刪改查操作MyBatis
- springboot整合mybatis增刪改查(三):mybatis逆向工程Spring BootMyBatis
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- Go實現對MySQL的增刪改查GoMySql
- 單連結串列實現增刪改查
- 封裝模組實現商品增刪改查封裝
- FMDB | 實現資料的增刪改查
- 看Zepto如何實現增刪改查DOM
- .NET使用P/Invoke來實現登錄檔的增、刪、改、查功能
- HarmonyOS NEXT應用開發之Tab元件實現增刪Tab標籤元件
- Flask——模型的使用及增刪改Flask模型
- Java實現簡單的增刪改查操作Java
- Node.js+Express+Mysql 實現增刪改查Node.jsExpressMySql
- Mongodb write寫(增、刪、改)模組原始碼實現MongoDB原始碼
- jQuery實現購物車的增刪改查jQuery
- abp(net core)+easyui+efcore實現倉儲管理系統——展現層實現增刪改查之增刪改檢視(八)UI
- 筆記03:sqlalchemy增刪改查筆記SQL
- html5新增及刪除標籤HTML
- koa+mysql實現增刪改查-全棧之路MySql全棧