软件编程
位置:首页>> 软件编程>> java编程>> Mybatis实现数据的增删改查实例(CRUD)

Mybatis实现数据的增删改查实例(CRUD)

作者:ImportNew  发布时间:2022-05-29 07:03:50 

标签:Mybatis,增删改查

什么是 MyBatis?

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

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

Mybatis实例

对一个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目录下建一个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文件,每个xml配置文件对应一个接口 -->
 <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语句 -->
 <select id="selectUserByID" parameterType="int" resultType="User">
   select * from `user` where user.id = #{id}
 </select>

<!-- 定义的resultMap,可以解决类的属性名和数据库列名不一致的问题-->
 <!-- <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语句,注意 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>

<!--执行增加操作的SQL语句。id和parameterType分别与IUserOperation接口中的addUser方法的名字和参数类型一致。
 useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;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>

配置文件实现了接口和SQL语句的映射关系。selectUsersByName采用了2种方式实现,注释掉的也是一种实现,采用resultMap可以把属性和数据库列名映射关系定义好,property为类的属性,column是表的列名,也可以是表列名的别名!

User类的定义:


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为操作接口,函数名和mybatis的xml配置文件中的操作id名对应。

测试类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());
   }
 }

}

代码下载:MyBaitsSimpleDemo_jb51.rar

来源:http://www.tuicool.com/articles/r6zAfi3

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com