最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Mybatis實(shí)現(xiàn)CRUD操作過(guò)程解析(xml方式)

 更新時(shí)間:2020年11月02日 09:00:52   作者:愛(ài)寫代碼的基  
這篇文章主要介紹了基于Mybatis實(shí)現(xiàn)CRUD操作過(guò)程解析(xml方式),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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)建項(xiàng)目

導(dǎo)入如下jar

  • mybatis框架包
  • 數(shù)據(jù)庫(kù)驅(qū)動(dòng)包
  • log4j日志包
  • junit單元測(cè)試包

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ù)庫(kù)連接參數(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;

/**
 用戶實(shí)體類對(duì)象 */
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ù)訪問(wèn)層接口:對(duì)用戶進(jìn)行增刪改查操作
 */
public interface UserMapper {
	/**
	 * 添加用戶
	 */
	int addUser(User user);
	/**
	 * 根據(jù)id刪除用戶
	 */
	void deleteUser(Integer id);
	/**
	 * 通過(guò)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">
<!--
  映射的作用:一個(gè)映射文件就對(duì)應(yīng)一個(gè)接口,一個(gè)接口可以有多個(gè)映射文件,一般是一對(duì)一關(guān)系。
  mapper標(biāo)簽的namespace屬性的作用:關(guān)聯(lián)接口,需要配置對(duì)應(yīng)接口的類全名字符串
-->
<mapper namespace="com.vg.dao.UserMapper">
  <!-- 完成接口映射配置文件UserMapper.xml的編寫:這個(gè)映射文件就相當(dāng)于UserMapper接口實(shí)現(xiàn)類配置 -->

  <!--select標(biāo)簽的作用:用來(lái)配置查詢要執(zhí)行的SQL語(yǔ)句
    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)簽:一個(gè)該標(biāo)簽就配置一個(gè)接口映射文件
      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 測(cè)試類代碼

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;

/**
 * 測(cè)試類
 */
public class TestUserMapper {
	private static SqlSessionFactory sqlSessionFactory =null;
	private SqlSession sqlSession =null;
	private UserMapper userMapper =null;

	// 該方法在所有測(cè)試方法執(zhí)行之前執(zhí)行1次
	@BeforeClass
	public static void init() throws Exception {
		// 1. 通過(guò)Resources類,加載sqlMapConfig.xml,得到文件輸入流對(duì)
		InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
		// 2. 實(shí)例化會(huì)話工廠創(chuàng)建類SqlSessionFactoryBuilder對(duì)象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		// 3. 根據(jù)字節(jié)輸入流獲取SqlSessionFactory對(duì)象
		sqlSessionFactory = builder.build(in);
	}
	// 該方法會(huì)在每個(gè)測(cè)試方法執(zhí)行之前執(zhí)行1次
	@Before
	public void before(){
		// 4. 獲取SqlSession對(duì)象,等價(jià)連接對(duì)象
		// true:事務(wù)自動(dòng)提交,false:不自動(dòng)提交,默認(rèn)值
		sqlSession = sqlSessionFactory.openSession();
		// 5. 創(chuàng)建接口 實(shí)現(xiàn)類對(duì)象
		userMapper = sqlSession.getMapper(UserMapper.class);

	}
	/**
	 * 測(cè)試方法:通過(guò)用戶名模糊查詢用戶
	 */
	@Test
	public void testAddUser() throws Exception{
		// 1. 獲得接口代理對(duì)象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 2. 創(chuàng)建User對(duì)象
		User u = new User();
		u.setUsername("如來(lái)佛祖111");
		u.setBirthday(Date.valueOf("1980-01-20"));
		u.setAddress("西天靈山");
		u.setSex("男");
		// 3. 保存用戶信息
		int row = userMapper.addUser(u);
		System.out.println("row = " + row);
		// 4. 手動(dòng)提交事務(wù)
		sqlSession.commit();
	}
	/**
	 * 測(cè)試方法:通過(guò)用戶名模糊查詢用戶
	 */
	@Test
	public void testFindUserByName() throws Exception{
		List<User> userList = userMapper.findUsersByName("%精%");
		for (User user : userList) {
			System.out.println(user);
		}
	}

	/**
	 * 測(cè)試方法:查詢所有用戶
	 */
	@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)建用戶對(duì)象
		User user = new User(
				6,
				"牛魔王",
				Date.valueOf("1998-02-20"),
				"妖",
				"牛魔洞");
		// 更新用戶
		userMapper.updateUser(user);

		// 提交事務(wù)
		sqlSession.commit();
	}
	@Test
	public void testDeleteUser()throws Exception{
		// 1. 獲得接口代理對(duì)象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		// 2. 根據(jù)id刪除用戶
		userMapper.deleteUser(6);
		// 3. 提交事務(wù)
		sqlSession.commit();
	}
	@After
	public void after() {
		// 7. 關(guān)閉會(huì)話,釋放資源。

		sqlSession.close();
	}
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解

    Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解

    這篇文章主要為大家介紹了Spring?Cloud?Hystrix?服務(wù)降級(jí)限流策略詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Java集合中的fail-fast(快速失敗)機(jī)制詳解

    Java集合中的fail-fast(快速失敗)機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于Java集合中fail-fast(快速失敗)機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Maven基礎(chǔ)之如何修改本地倉(cāng)庫(kù)的默認(rèn)路徑

    Maven基礎(chǔ)之如何修改本地倉(cāng)庫(kù)的默認(rèn)路徑

    這篇文章主要介紹了Maven基礎(chǔ)之如何修改本地倉(cāng)庫(kù)的默認(rèn)路徑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring Boot Admin 的使用詳解

    Spring Boot Admin 的使用詳解

    這篇文章主要介紹了Spring Boot Admin 的使用詳解,Spring Boot Admin 用于監(jiān)控基于 Spring Boot 的應(yīng)用,有興趣的可以了解一下
    2017-09-09
  • SpringBoot Security前后端分離登錄驗(yàn)證的實(shí)現(xiàn)

    SpringBoot Security前后端分離登錄驗(yàn)證的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot Security前后端分離登錄驗(yàn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中DTO與Entity拷貝轉(zhuǎn)換的方法小結(jié)

    Java中DTO與Entity拷貝轉(zhuǎn)換的方法小結(jié)

    在?Java?開發(fā)中,DTO(Data?Transfer?Object)和?Entity(實(shí)體類)是常見(jiàn)的兩種數(shù)據(jù)模型,本文將介紹幾種常見(jiàn)的工具類和自定義方式來(lái)實(shí)現(xiàn)這種轉(zhuǎn)換,感興趣的可以了解下
    2025-02-02
  • Spring JDBC的使用方法詳解

    Spring JDBC的使用方法詳解

    這篇文章主要介紹了Spring JDBC的使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 基于RocketMQ推拉模式詳解

    基于RocketMQ推拉模式詳解

    這篇文章主要介紹了RocketMQ推拉模式的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 幾道java循環(huán)練習(xí)題(適合新人)

    幾道java循環(huán)練習(xí)題(適合新人)

    這篇文章主要給大家介紹了幾道java循環(huán)練習(xí)題,非常適合剛?cè)腴T的java新人,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java RabbitMQ高級(jí)特性詳細(xì)分析

    Java RabbitMQ高級(jí)特性詳細(xì)分析

    為了保證消息的可靠性傳輸,包括投遞消息的生產(chǎn)方能投遞成功,和消息消費(fèi)的消費(fèi)方正確消費(fèi),RabbitMQ 提供了兩個(gè)確認(rèn)機(jī)制,由于消息按照流通的順序從左到右,因此為保證可靠性,MQ必須對(duì) Producer進(jìn)行確認(rèn),Consumer 必須對(duì) MQ 進(jìn)行確認(rèn)
    2022-08-08

最新評(píng)論

东平县| 姜堰市| 邳州市| 玛多县| 永善县| 铜鼓县| 保山市| 临沧市| 凤翔县| 卢龙县| 霸州市| 西昌市| 孙吴县| 墨玉县| 遂平县| 喀喇沁旗| 林西县| 沙雅县| 南木林县| 宾阳县| 柳林县| 彭州市| 探索| 南昌市| 湟源县| 上蔡县| 峨眉山市| 玛沁县| 河北省| 盘山县| 玉山县| 中山市| 宾川县| 乌什县| 台山市| 大渡口区| 宜君县| 聊城市| 肇东市| 乳源| 九龙坡区|