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

Mybatis實(shí)現(xiàn)增刪改查(CRUD)實(shí)例代碼

 更新時(shí)間:2016年05月24日 11:07:54   作者:阿凡盧  
MyBatis 是支持普通 SQL 查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。通過(guò)本文給大家介紹Mybatis實(shí)現(xiàn)增刪改查(CRUD)實(shí)例代碼 ,需要的朋友參考下

MyBatis簡(jiǎn)介

MyBatis 是支持普通 SQL 查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。 MyBatis 消除了幾乎所有的 JDBC 代碼和參數(shù)的手工設(shè)置以及對(duì)結(jié)果集的檢索。MyBatis 可以使用簡(jiǎn)單的XML 或注解用于配置和原始映射,將接口和 Java 的 POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。

MyBatis下載:https://github.com/mybatis/mybatis-3/releases

Mybatis實(shí)例

對(duì)一個(gè)User表的CRUD操作:

User表:

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(50) DEFAULT NULL,
`userAge` int(11) DEFAULT NULL,
`userAddress` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'summer', '30', 'shanghai');
INSERT INTO `user` VALUES ('2', 'test2', '22', 'suzhou');
INSERT INTO `user` VALUES ('3', 'test1', '29', 'some place');
INSERT INTO `user` VALUES ('4', 'lu', '28', 'some place');
INSERT INTO `user` VALUES ('5', 'xiaoxun', '27', 'nanjing'); 

在Src目錄下建一個(gè)mybatis的xml配置文件Configuration.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>
<!-- mybatis別名定義 -->
<typeAliases> 
<typeAlias alias="User" type="com.mybatis.test.User"/> 
</typeAliases> 
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!-- mybatis的mapper文件,每個(gè)xml配置文件對(duì)應(yīng)一個(gè)接口 -->
<mappers>
<mapper resource="com/mybatis/test/User.xml"/>
</mappers>
</configuration> 

定義User mappers的User.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.mybatis.test.IUserOperation">
<!-- select語(yǔ)句 -->
<select id="selectUserByID" parameterType="int" resultType="User">
select * from `user` where user.id = #{id}
</select>
<!-- 定義的resultMap,可以解決類(lèi)的屬性名和數(shù)據(jù)庫(kù)列名不一致的問(wèn)題-->
<!-- <resultMap type="User" id="userResultMap">
<id property="id" column="user_id" />
<result property="userName" column="user_userName" />
<result property="userAge" column="user_userAge" />
<result property="userAddress" column="user_userAddress" />
</resultMap> -->
<!-- 返回list的select語(yǔ)句,注意 resultMap的值是指向前面定義好的 -->
<!-- <select id="selectUsersByName" parameterType="string" resultMap="userResultMap">
select * from user where user.userName = #{userName}
</select> -->
<select id="selectUsersByName" parameterType="string" resultType="User">
select * from user where user.userName = #{userName}
</select>
<!--執(zhí)行增加操作的SQL語(yǔ)句。id和parameterType分別與IUserOperation接口中的addUser方法的名字和參數(shù)類(lèi)型一致。
useGeneratedKeys設(shè)置為"true"表明要MyBatis獲取由數(shù)據(jù)庫(kù)自動(dòng)生成的主鍵;keyProperty="id"指定把獲取到的主鍵值注入到User的id屬性--> 
<insert id="addUser" parameterType="User" 
useGeneratedKeys="true" keyProperty="id"> 
insert into user(userName,userAge,userAddress) 
values(#{userName},#{userAge},#{userAddress}) 
</insert>
<update id="updateUser" parameterType="User" >
update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper> 

配置文件實(shí)現(xiàn)了接口和SQL語(yǔ)句的映射關(guān)系。selectUsersByName采用了2種方式實(shí)現(xiàn),注釋掉的也是一種實(shí)現(xiàn),采用resultMap可以把屬性和數(shù)據(jù)庫(kù)列名映射關(guān)系定義好,property為類(lèi)的屬性,column是表的列名,也可以是表列名的別名!

User類(lèi)的定義:

package com.mybatis.test;
public class User {
private int id;
private String userName;
private int userAge;
private String userAddress;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
@Override
public String toString(){
return this.userName+" "+this.userAge+" "+this.userAddress;
}
}

IUserOperaton定義:

package com.mybatis.test;
import java.util.List;
public interface IUserOperation {
public User selectUserByID(int id);
public List<User> selectUsersByName(String userName);
public void addUser(User user);
public void updateUser(User user);
public void deleteUser(int id);
} 

IUserOperation為操作接口,函數(shù)名和mybatis的xml配置文件中的操作id名對(duì)應(yīng)。

測(cè)試類(lèi)Test:

package com.mybatis.test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
public void getUserByID(int userID) {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session
.getMapper(IUserOperation.class);
User user = userOperation.selectUserByID(userID);
if (user != null) {
System.out.println(user.getId() + ":" + user.getUserName()
+ ":" + user.getUserAddress());
}
} finally {
session.close();
}
}
public void getUserList(String userName) {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session
.getMapper(IUserOperation.class);
List<User> users = userOperation.selectUsersByName(userName);
for (User user : users) {
System.out.println(user.getId() + ":" + user.getUserName()
+ ":" + user.getUserAddress());
}
} finally {
session.close();
}
}
/**
* 增加后要commit
*/
public void addUser() {
User user = new User();
user.setUserAddress("place");
user.setUserName("test_add");
user.setUserAge(30);
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session
.getMapper(IUserOperation.class);
userOperation.addUser(user);
session.commit();
System.out.println("新增用戶ID:" + user.getId());
} finally {
session.close();
}
}
/**
* 修改后要commit
*/
public void updateUser() {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session
.getMapper(IUserOperation.class);
User user = userOperation.selectUserByID(1);
if (user != null) {
user.setUserAddress("A new place");
userOperation.updateUser(user);
session.commit();
}
} finally {
session.close();
}
}
/**
* 刪除后要commit.
* 
* @param id
*/
public void deleteUser(int id) {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session
.getMapper(IUserOperation.class);
userOperation.deleteUser(id);
session.commit();
} finally {
session.close();
}
}
public static void main(String[] args) {
try {
Test test = new Test();
// test.getUserByID(1);
// test.getUserList("test1");
// test.addUser();
// test.updateUser();
// test.deleteUser(6);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

以上所述是小編給大家介紹的Mybatis實(shí)現(xiàn)增刪改查(CRUD)實(shí)例代碼 ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringCloud OpenFeign基本介紹與實(shí)現(xiàn)示例

    SpringCloud OpenFeign基本介紹與實(shí)現(xiàn)示例

    OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開(kāi)發(fā),讓開(kāi)發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-02-02
  • Java之源文件的執(zhí)行全過(guò)程

    Java之源文件的執(zhí)行全過(guò)程

    這篇文章主要介紹了Java之源文件的執(zhí)行全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • spring bean.xml文件p標(biāo)簽使用報(bào)錯(cuò)的解決

    spring bean.xml文件p標(biāo)簽使用報(bào)錯(cuò)的解決

    這篇文章主要介紹了spring bean.xml文件p標(biāo)簽使用報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring?注入集合實(shí)現(xiàn)過(guò)程示例詳解

    Spring?注入集合實(shí)現(xiàn)過(guò)程示例詳解

    這篇文章主要為大家介紹了Spring?注入集合實(shí)現(xiàn)過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java開(kāi)發(fā)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    Java開(kāi)發(fā)實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了Java開(kāi)發(fā)實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java 高并發(fā)四:無(wú)鎖詳細(xì)介紹

    Java 高并發(fā)四:無(wú)鎖詳細(xì)介紹

    本文主要介紹Java 高并發(fā)無(wú)鎖的知識(shí),這里整理了 1.無(wú)鎖類(lèi)的原理詳解 2.無(wú)鎖類(lèi)的使用的知識(shí),并講解其原理,有需要的小伙伴可以參考下
    2016-09-09
  • Awaitility同步異步工具實(shí)戰(zhàn)示例詳解

    Awaitility同步異步工具實(shí)戰(zhàn)示例詳解

    這篇文章主要為大家介紹了Awaitility同步異步工具實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Jrebel啟動(dòng)失敗解決方案詳解

    Jrebel啟動(dòng)失敗解決方案詳解

    這篇文章主要介紹了Jrebel啟動(dòng)失敗解決方案詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java設(shè)計(jì)模式筆記之Builder模式

    Java設(shè)計(jì)模式筆記之Builder模式

    建造者模式是日常開(kāi)發(fā)中比較常見(jiàn)的設(shè)計(jì)模式,它的主要作用就是將復(fù)雜事物創(chuàng)建的過(guò)程抽象出來(lái),該抽象的不同實(shí)現(xiàn)方式不同,創(chuàng)建出的對(duì)象也不同,這篇文章主要給大家介紹了關(guān)于Java設(shè)計(jì)模式筆記之Builder模式的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • springboot多模塊包掃描問(wèn)題的解決方法

    springboot多模塊包掃描問(wèn)題的解決方法

    這篇文章主要介紹了springboot多模塊包掃描問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

兴安县| 工布江达县| 塔河县| 安陆市| 阆中市| 高雄市| 灵丘县| 竹溪县| 秦安县| 中江县| 新蔡县| 信宜市| 淄博市| 花莲县| 姚安县| 嘉兴市| 宝清县| 县级市| 葵青区| 高邑县| 大安市| 普格县| 江北区| 县级市| 长子县| 获嘉县| 维西| 曲水县| 朝阳区| 额尔古纳市| 建瓯市| 华亭县| 宣威市| 沿河| 合山市| 平罗县| 遂溪县| 公主岭市| 息烽县| 南投县| 将乐县|