使用MyBatis进行对数据表的增删改查操作

1.导入jar包并配置MyBatis的配置文件





  
  
    
    
      
      
      
      
        
        
        
        
      
    
  
  
  
    
  


2.创建实体类,并配置映射文件

package com.gu.domain;
import java.util.Date;
public class Person {
	private Integer id;
	private String name;
	private Integer age;
	private String sex;
	private Date birthday;
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Person(String name, Integer age, String sex, Date birthday) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.birthday = birthday;
	}
	public Person(Integer id, String name, Integer age, String sex,
			Date birthday) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.birthday = birthday;
	}
Setter、Getter方法(省略)。。。
	@Override
	public String toString() {
		return "Person [age=" + age + ", birthday=" + birthday + ", id=" + id
				+ ", name=" + name + ", sex=" + sex + "]";
	}
}

在以上的配置文件中,不管用户是进行对数据表的和中操作都要配置的,所以将以上两步提取出来,现分别对增删改查进行详细说明。

(1)插入数据操作

MyBatis是一个ORM框架,是一个基于JDBC的开源框架.其中数据库和相关表必须手工创建。

1、创建数据库以及数据表

create database  test;
create table t_person(
	id int primary key auto_increment,
	name varchar(20) unique not null,
	age int ,
	sex varchar(10) ,
	birthday date 
);
2、配置插入操作的实体类的映射文件





		insert into t_person values(null,#{name},#{age},#{sex},#{birthday});
	

说明:namespace="com.gu.domain.PersonMapper" 取值必须唯一,一般建议使用包名+类名

paramentType="com.gu.domain.Person"指定输入参数的数据类型(因为此处我们是插入一个person实体,所以用Person实体类

resultType="com.gu.domain.Person"指定输出参数的数据类型(只插入无输出情况,所以此处省略不写)

id=”insertPerson” :此处是insert语句的片段,并且id值必须唯一。命名要有规范!

#{ } 表示MyBatis特有的规范写法,使用在xml映射文件中。{ } 内填写与之对应的属性名。如果输入参数的数据类型(parameterType)是“int”类型的,{ }内可以任意填写,其余则不行。

3、测试类


public class test01 {
	public static void main(String[] args) {
		String resource = "myBatis.cfg.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
Person person = new Person("赵丽颖", 17, "女",new Date()); 
int count= sqlSession.insert("com.gu.domain.PersonMapper.insertPerson",person); sqlSession.commit();
System.out.println("count="+count);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

说明:

· 如何构建SqlSessionFactory

XML 中构建 SqlSessionFactory步骤:

//1.得到输入流
String resource = "myBatis.cfg.xml";
inputStream=Resources.getResourceAsStream(resource);
//2.得到SqlSessionFactory对象
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//3.得到SqlSession对象
//sqlSession=sqlSessionFactory.openSession();//默认事务不是自动提交的
sqlSession=sqlSessionFactory.openSession(true);//设置事务自动提交,则不需要手工提交事务了

·使用sqlSession.insert(statement,parameter)进行数据插入操作。

Statement:namespace+id的值(如:com.gu.domain.PersonMapper.insertPerson

Parameter:传入的属性值(如:person)

·在进行数据增删改时,必须手动进行事务提交才能在数据表中保存数据。所以在sqlSession.insert()方法后还需要手动的事务提交。事务提交调用sqlSession.commit()方法。

(2)查看数据操作

1、映射文件配置信息



	
	
	
2、测试
public class test01 {
	public static void main(String[] args) {
		String resource = "myBatis.cfg.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			  Person person =
			  sqlSession.selectOne("com.gu.domain.PersonMapper.selectById",1);
			/*
			 * List persons
			 * =sqlSession.selectList("com.gu.domain.PersonMapper.selectAll");
			 * System.out.println(persons);
			 */
			/*String condition = "赵";
			List person = sqlSession.selectList(
					"com.gu.domain.PersonMapper.selectLike",
					'%' + condition + '%');
			System.out.println(person);*/
			} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

注意:

1selectOne和selectList 都可以查询到用户,但是两者有明显的区别:

SelectOne : 表示查询的用户是一个或者是0

SelectList :表示查询的用户是1个或者多个,返回的是list集合。

当对 对象进行查询时,必须使用SelectList方法。

2 在模糊查询时,Parameter传入的属性值要根据映射文件的模糊查询条件进行给定。模糊查询可能查出1个或者多个,所以说模糊查询必须使用selectList方法,返回List集合。


(3)修改数据操作

1、映射文件配置信息





update t_person set name=#{name},age=#{age},sex=#{sex},birthday=#{birthday}
 where 	id=#{id};
  

2、测试(先查询此用户是否存在,如果存在则进行修改用户信息)

public class test01 {
	public static void main(String[] args) {
		String resource = "myBatis.cfg.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			sqlSession.selectOne("com.gu.domain.PersonMapper.selectById", 5);
			if(person!=null){
				person.setName("王思聪");
				person.setAge(28);
				person.setSex("女");
				person.setBirthday(new Date());
				sqlSession.update("com.gu.domain.PersonMapper.updateById",person);
				sqlSession.commit();
			}else{
				throw new RuntimeException("查不到此用户");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

说明:对用进行修改信息时,使用update语句。

(4)删除数据操作

1、映射文件配置信息




 
		delete from t_person;


2、测试

public class test01 {
	public static void main(String[] args) {
		String resource = "myBatis.cfg.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			int count=sqlSession.delete("com.gu.domain.PersonMapper.deleteAll");
			sqlSession.commit();
			System.out.println("coune="+count);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

说明:删除操作时,直接调用delete方法。



















你可能感兴趣的:(架构设计)