【MyBatis】第一课 MyBatis的框架的搭建和使用_笔触狂放的博客-CSDN博客
本文在上一篇文章之后,操作数据库的增删改查。
1.查询操作在mapper.xml映射文件中编写查询的sql语句,根据不同的条件和查询的字段进行分析和设置
SELECT COUNT(*) FROM book
在测试类中定义执行不同sql语句的测试方法,根据指定的id属性的值定位要执行的sql,并根据设置的参数类型进行传递参数和获得返回值。
package com.book.test;
import com.book.entity.Book;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BookTest {
public SqlSession ss=null;
public void init(){
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建执行sql语句的工厂生成器 工厂模式,策略模式
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
//获得sqlsession对象
ss=factory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void One(){
init();
int i= ss.selectOne("com.book.dao.getBookNumber");
System.out.println("查询到的书籍的数量为:"+i+"本");
}
@Test
public void Two(){
init();
String name=ss.selectOne("com.book.dao.getBookName");
System.out.println("获得图书的名称为:"+name);
}
@Test
public void Two1(){
init();
//将参数作为占位符的形式传入sql语句
String name=ss.selectOne("com.book.dao.getBookName1",3);
System.out.println("获得图书的名称为:"+name);
}
@Test
public void three(){
init();
//先将需要传入的数据进行封装成Map集合
//对象关系型映射
Map map=new HashMap<>();
map.put("author","罗贯中");
map.put("price",98);
//查询的是单条数据
String name=ss.selectOne("com.book.dao.getBookName2",map);
System.out.println("获得图书的名称为:"+name);
}
@Test
public void four(){
init();
//将要传入的参数数据封装到实体类中
Book book=new Book();
book.setAuthor("罗贯中");
book.setPrice(98);
//查询的是单条数据
String name=ss.selectOne("com.book.dao.getBookName3",book);
System.out.println("获得图书的名称为:"+name);
}
@Test
public void five(){
init();
//查询的还是单条数据
Book book=ss.selectOne("com.book.dao.getBookById",2);
System.out.println(book);
}
@Test
public void five1(){
init();
Map map=ss.selectOne("com.book.dao.getBookById1",2);
System.out.println(map);
}
@Test
public void six(){
init();
//查询多条数据
List
2.添加操作
在mapper.xml文件中编写添加的sql语句
insert into book(name,author,price,count) values(#{name},#{author},#{price},#{count})
在测试类中进行测试
package com.book.test;
import com.book.entity.Book;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BookTest {
public SqlSession ss=null;
public void init(){
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建执行sql语句的工厂生成器 工厂模式,策略模式
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
//获得sqlsession对象
ss=factory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void eight(){
init();
//创建Map集合,将要添加的数据封装起来
Map map=new HashMap<>();
map.put("name","水浒传");
map.put("author","施耐庵");
map.put("price",198);
map.put("count",120);
int i=ss.insert("com.book.dao.addBook",map);
//在执行添加,修改,删除操作的时候,涉及数据库的事务的回滚,因此,在执行这三种操作的时候
//需要做提交的操作
ss.commit();
if(i>0){
System.out.println("添加成功");
}
}
}
3.修改操作
在mapper.xml文件中编写修改的sql语句
update book set price=#{price},count=#{count} where id=#{id}
在测试类中进行测试
package com.book.test;
import com.book.entity.Book;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BookTest {
public SqlSession ss=null;
public void init(){
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建执行sql语句的工厂生成器 工厂模式,策略模式
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
//获得sqlsession对象
ss=factory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void nine(){
init();
//创建book实体类
Book book=new Book();
book.setPrice(135);
book.setCount(80);
book.setId(2);
int i=ss.update("com.book.dao.updateBook",book);
ss.commit();
if (i>0)
System.out.println("修改成功");
}
}
4.删除操作
在mapper.xml文件中编写删除的sql语句
delete from book where name=#{name}
在测试类中进行测试
package com.book.test;
import com.book.entity.Book;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BookTest {
public SqlSession ss=null;
public void init(){
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建执行sql语句的工厂生成器 工厂模式,策略模式
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
//创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
//获得sqlsession对象
ss=factory.openSession();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void ten(){
init();
int i=ss.delete("com.book.dao.delBook","西游记");
ss.commit();
if (i>0)
System.out.println("删除成功");
}
}
总结
在以上的代码中,涉及到自定义实体类的操作,一般自定义实体类的封装以数据库中要操作的表进行对应。其代码如下:
package com.book.entity;
public class Book {
private int id;
private String name;
private String author;
private double price;
private int count;
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + ''' +
", author='" + author + ''' +
", price=" + price +
", count=" + count +
'}';
}
public Book() {
}
public Book(int id, String name, String author, double price, int count) {
this.id = id;
this.name = name;
this.author = author;
this.price = price;
this.count = count;
}
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 getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
本文的测试采用JUnit框架进行单元测试,无需运行整个项目,只需要执行单个的方法即可。即对于JUnit框架的使用并未掌握的初学者,可查阅【Jsp】第十一课 JDBC的回顾及单元测试框架的使用_笔触狂放的博客-CSDN博客



