- 使用 mybatis 查询用户数据(读取用户列表)
- 使用 mybatis 增加用户数据
- 使用 mybatis 更新用户数据
- 使用 mybatis 删除用户数据
查询数据,前面已经讲过简单的查询单个用户数据,在这里将查询出用户列表,
要查询出列表,也就是返回 List
, 在我们这个例子中也就是List<User>
, 要以这种方式返回数据,需要在User.xml
里面配置返回的类型 resultMap
, 注意不是 resultType
, 而这个resultMap
所对应的应该是我们自己配置。
在此示例中,我们需要使用到以下表:
接下我们创建一个表:user,并插入一条记录信息,其结构如下所示: 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', 'gaga', 'Tech', 'http://www.gaga.com', '13800009988');
我们首先来创建一个工程:mybatis-curd-03,与第一节中介绍的环境配置一样,加入所需的 jar
包:mysql-connector
和 mybatis3.jar
。配置 conf.xml
,其文件内容如下
注意:需要引入数据表的model:
<typeAliases> <typeAlias alias="User" type="me.gacl.domain.User" /> </typeAliases>
<?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="me.gacl.domain.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://localhost:3306/yiibai" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> <mappers> <!-- 注册userMapper.xml文件, userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml--> <!-- 注释 --> <mapper resource="me/gacl/mapping/userMapper.xml"/> </mappers> </configuration>
2、创建 Java 类和接口
创建数据表的mode的java类,和相应的增删改查接口类以及实现方法类(配置)
数据表model类:
package me.gacl.domain; 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; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", dept=" + dept + ", phone=" + phone + ", website=" + website + "]"; } }
增删改查的接口类
IUser.java
接口位于包me.gacl.dao
下,IUser.java
接口代码内容如下:
package me.gacl.dao; import java.util.List; import me.gacl.domain.User; public interface IUser { public List<User> getUserList(); public void insertUser(User user); public void updateUser(User user); public void deleteUser(int userId); public User getUser(int id); }
实现IUser.java增删改查类的配置方法
这里还需要一个XML文件,与前一小节中一样,使用的是 UserMapper.xml
,在这我们分别对应了增删改查的操作(每一个操作的 ID
对应于IUser
接口的方法),其内容如下:
<?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="me.gacl.dao.IUser"> <select id="getUser" parameterType="int" resultType="me.gacl.domain.User"> select * from user where id = #{id} </select> <insert id="insertUser" parameterType="User"> INSERT INTO USER (name, dept, website, phone) VALUES (#{name}, #{dept}, #{website}, #{phone}) </insert> <select id="getUserList" resultType="me.gacl.domain.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>
测试主程序:
package me.gacl.test; import java.io.Reader; import java.util.List; import java.text.MessageFormat; 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 me.gacl.dao.IUser; import me.gacl.domain.User; public class Test3 { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("conf.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); }catch(Exception e) { e.printStackTrace(); } } public static SqlSessionFactory getSession() { return sqlSessionFactory; } public static void main(String[] args) { SqlSession sqlSession = sqlSessionFactory.openSession(); try { //用户数据列表 //getUserList(); //插入数据 //insertUser(); //修改数据 //updateUser(); //删除数据 deleteUser(); }finally { sqlSession.close(); } } public static void getUserList() { try { SqlSession sqlSession = sqlSessionFactory.openSession(); IUser iuser = sqlSession.getMapper(IUser.class); //显示USER信息 System.out.println("Test get start...."); printUsers(iuser.getUserList()); System.out.println("Test get finishing"); }catch(Exception e) { e.printStackTrace(); } } public 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()); } } public static void insertUser() { try { //连接sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //获取mapper IUser iuser = sqlSession.getMapper(IUser.class); System.out.println("Test insert start......"); //执行插入 User user = new User(); user.setId(0); user.setName("google"); user.setDept("tech"); user.setPhone("13888888889"); user.setWebsite("http://www.google.com"); iuser.insertUser(user); //提交事务 sqlSession.commit(); System.out.println("Test insert end......"); //插入后显示 System.out.println("alter insert"); getUserList(); System.out.println("--------------------------------"); }catch(Exception e) { e.printStackTrace(); } } public static void updateUser() { try { //连接session SqlSession sqlSession = sqlSessionFactory.openSession(); IUser iuser = sqlSession.getMapper(IUser.class); System.out.println("Test update start......"); System.out.println(iuser.getUserList()); System.out.println("-----------------------"); //执行更新 User user = iuser.getUser(1); user.setName("gaga"); iuser.updateUser(user); //提交事务 sqlSession.commit(); System.out.println("-----------------------"); System.out.println(iuser.getUserList()); System.out.println("Test update end......"); }catch(Exception e) { e.printStackTrace(); } } public static void deleteUser() { try { //连接sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); IUser iUser = sqlSession.getMapper(IUser.class); System.out.println("Test delete start......"); //显示删除前的 System.out.println("befor delete"); printUsers(iUser.getUserList()); iUser.deleteUser(1); //提交数据 sqlSession.commit(); //显示删除后的 System.out.println(" alter delete "); printUsers(iUser.getUserList()); System.out.println("Test delete end......"); }catch(Exception e) { e.printStackTrace(); } } }