Mybatis增删改查(CURD)

  1. 使用 mybatis 查询用户数据(读取用户列表)
  2. 使用 mybatis 增加用户数据
  3. 使用 mybatis 更新用户数据
  4. 使用 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();
		}
	}
}

  

 

posted @ 2018-06-11 22:07  穆晟铭  阅读(1327)  评论(0编辑  收藏  举报