mybatis增删查改
Posted 夏的世界存在的伤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis增删查改相关的知识,希望对你有一定的参考价值。
查询数据,前面已经讲过简单的查询单个用户数据,在这里将查询出用户列表,
要查询出列表,也就是返回 List
, 在我们这个例子中也就是List<User>
, 要以这种方式返回数据,需要在User.xml
里面配置返回的类型 resultMap
, 注意不是 resultType
, 而这个resultMap
所对应的应该是我们自己配置。
在此示例中,我们需要使用到以下表:
CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL DEFAULT ‘‘, `dept` varchar(254) NOT NULL DEFAULT ‘‘, `website` varchar(254) DEFAULT ‘‘, `phone` varchar(16) NOT NULL DEFAULT ‘‘, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (‘1‘, ‘yiibai‘, ‘Tech‘, ‘http://www.yiibai.com‘, ‘13800009988‘);
1、创建工程并配置所需环境
我们首先来创建一个工程:mybatis-curd-03,与第一节中介绍的环境配置一样,加入所需的
jar
包:mysql-connector
和 mybatis3.jar
。配置 src/config/Configure.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> <typeAliases> <typeAlias alias="User" type="com.yiibai.mybatis.models.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/testdb" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <!-- // power by http://www.yiibai.com --> <mapper resource="com/yiibai/mybatis/models/User.xml" /> </mappers> </configuration>
2、创建 Java 类和接口
在这里需要创建一个类和一个接口:
User.java
类和IUser.java
接口,User.java
类位于包 com.yiibai.mybatis.models
下,User.java
类代码内容如下:package com.yiibai.mybatis.models; public class User { private int id; private String name; private String dept; private String phone; private String website; public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDept() { return dept; } public void setDept(String dept) { this.dept = dept; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
IUser.java
接口位于包com.yiibai.mybatis.dao
下,IUser.java
接口代码内容如下:
package com.yiibai.mybatis.dao; import java.util.List; import org.apache.ibatis.annotations.Select; import com.yiibai.mybatis.models.User; /** * * @author yiibai * */ public interface IUser { //@Select("select * from user where id= #{id}") //public User getUserByID(int id); public List<User> getUserList(); public void insertUser(User user); public void updateUser(User user); public void deleteUser(int userId); public User getUser(int id); }
这里还需要一个XML文件,与前一小节中一样,使用的是 User.xml
,在这我们分别对应了增删改查的操作(每一个操作的 ID
对应于IUser
接口的方法),其内容如下:
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.yiibai.mybatis.dao.IUser"> <select id="getUser" parameterType="int" resultType="com.yiibai.mybatis.models.User"> SELECT * FROM USER WHERE id = #{userId} </select> <insert id="insertUser" parameterType="User"> INSERT INTO USER(name, dept, website,phone) VALUES(#{name}, #{dept}, #{website}, #{phone}) </insert> <select id="getUserList" resultType="com.yiibai.mybatis.models.User"> SELECT * FROM USER </select> <update id="updateUser" parameterType="User"> UPDATE USER SET name= #{name}, dept = #{dept}, website = #{website}, phone = #{phone} WHERE id = #{id} </update> <delete id="deleteUser" parameterType="int"> DELETE FROM USER WHERE id = #{id} </delete> </mapper>
测试程序主类:
import java.io.Reader; import java.text.MessageFormat; 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; import com.yiibai.mybatis.dao.IUser; import com.yiibai.mybatis.models.User; public class Main { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("config/Configure.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSessionFactory getSession() { return sqlSessionFactory; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SqlSession session = sqlSessionFactory.openSession(); try { //sqlSessionFactory.getConfiguration().addMapper(IUser.class); //User user = (User) session.selectOne( "com.yiibai.mybatis.models.UserMapper.getUserByID", 1); // 用户数据列表 getUserList(); // 插入数据 // testInsert(); // 更新用户 //testUpdate(); // 删除数据 //testDelete(); } finally { session.close(); } } // public static void testInsert() { try { // 获取Session连接 SqlSession session = sqlSessionFactory.openSession(); // 获取Mapper IUser userMapper = session.getMapper(IUser.class); System.out.println("Test insert start..."); // 执行插入 User user = new User(); user.setId(0); user.setName("Google"); user.setDept("Tech"); user.setWebsite("http://www.google.com"); user.setPhone("120"); userMapper.insertUser(user); // 提交事务 session.commit(); // 显示插入之后User信息 System.out.println("After insert"); getUserList(); System.out.println("Test insert finished..."); } catch (Exception e) { e.printStackTrace(); } } // 获取用户列表 public static void getUserList() { try { SqlSession session = sqlSessionFactory.openSession(); IUser iuser = session.getMapper(IUser.class); // 显示User信息 System.out.println("Test Get start..."); printUsers(iuser.getUserList()); System.out.println("Test Get finished..."); } catch (Exception e) { e.printStackTrace(); } } public static void testUpdate() { try { SqlSession session = sqlSessionFactory.openSession(); IUser iuser = session.getMapper(IUser.class); System.out.println("Test update start..."); printUsers(iuser.getUserList()); // 执行更新 User user = iuser.getUser(1); user.setName("New name"); iuser.updateUser(user); // 提交事务 session.commit(); // 显示更新之后User信息 System.out.println("After update"); printUsers(iuser.getUserList()); System.out.println("Test update finished..."); }catch (Exception e) { e.printStackTrace(); } } // 删除用户信息 public static void testDelete() { try { SqlSession session = sqlSessionFactory.openSession(); IUser iuser = session.getMapper(IUser.class); System.out.println("Test delete start..."); // 显示删除之前User信息 System.out.println("Before delete"); printUsers(iuser.getUserList()); // 执行删除 iuser.deleteUser(2); // 提交事务 session.commit(); // 显示删除之后User信息 System.out.println("After delete"); printUsers(iuser.getUserList()); System.out.println("Test delete finished..."); }catch (Exception e) { e.printStackTrace(); } } /** * * 打印用户信息到控制台 * * @param users */ private static void printUsers(final List<User> users) { int count = 0; for (User user : users) { System.out.println(MessageFormat.format( "============= User[{0}]=================", ++count)); System.out.println("User Id: " + user.getId()); System.out.println("User Name: " + user.getName()); System.out.println("User Dept: " + user.getDept()); System.out.println("User Website: " + user.getWebsite()); } } }
执行以上程序,如果没有问题,应该能正确输出。那么这里所有增删改查都完成了,需要注意的是在增加,更改,删除的时候需要调用
session.commit()
来提交事务,这样才会真正对数据库进行操作提交保存,否则操作没有提交到数据中。
以上是关于mybatis增删查改的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis实现增删查改以及Mapper.xml 标签的解析