在第一期我们简单的了解了一下框架的使用方法:
创建实体类成员属性对应数据库表的列名→编写主配置文件→根据实际业务编写接口以及接口的实现类→编写接口的映射文件→测试代码
在本期,依照上述方式分别实现增删改查,篇幅较长,搬好小板凳,安心食用
查询
根据ID查找一本书籍的信息,以第一期的项目结构作为基础即可,在IBookDao接口中创建新方法用于查询:
public Book findBookById(int id);//查找一本书
到IBookDaoImpl实现类里添加未实现的抽象方法
@Override
public Book findBookById(int id) {
SqlSession session = null;
Book book = new Book();
try {
//1.读取主配置文件mybatis-config.xml
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
//2.根据主配置文件mybatis-config.xml构建SqlSessionFactory对象factory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
//3.根据SqlSessionFactory对象创建SqlSession对象session
session = factory.openSession();
//4.调用SqlSession对象session的selectList方法执行查询数据库的操作,返回映射后的结果集合
book = session.selectOne("com.jiheng.dao.IBookDao.findBookById",id);
} catch (Exception e1) {
e1.printStackTrace();
}finally {
session.close();
}
return book;
}
编写映射文件BookMapper.xml新增一个查询语句:
<select id="findBookById" resultType="com.jiheng.entity.Book">
SELECT * FROM books WHERE id=#{id}
</select>
测试代码,在测试类TestBook01中新建一个方法测试代码:
public static void findBookById(int id){
IBookDao bookDao = new IBookDaoImpl();
Book book = bookDao.findBookById(id);
book.show();
}
到主方法里去调用这个静态方法就OK!方法后面给一个我们想查找的书籍id:
public static void main(String[] args) {
findBookById(3);
}
结果如下:
增加
在IBookDao接口中创建新的方法用于添加一本书籍信息:
public int insertBook(Book book);//增加一本书
IBookDaoImpl实现类添加未实现的抽象方法:
@Override
public int insertBook(Book book) {
SqlSession session = null;
int count = 0;
try {
//1.读取主配置文件mybatis-config.xml
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
//2.根据主配置文件mybatis-config.xml构建SqlSessionFactory对象factory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
//3.根据SqlSessionFactory对象创建SqlSession对象session
session = factory.openSession();
//4.调用SqlSession对象session的selectList方法执行查询数据库的操作,返回映射后的结果集合
count = session.insert("com.jiheng.dao.IBookDao.insertBook",book);
session.commit();
} catch (Exception e1) {
e1.printStackTrace();
}finally {
session.close();
}
return count;
}
BookMapper.xml映射文件新增一条sql语句:
<insert id="insertBook">
INSERT INTO books VALUES(#{id},#{bookname},#{author},#{category})
</insert>
最后测试代码即可,编写测试类新增方法:
public static void insertBook(){
Book book = new Book();
book.setId(5);
book.setBookname("Mysql从删库到跑路");
book.setAuthor("张三");
book.setCategory("计算机技术");
IBookDao bookDao = new IBookDaoImpl();
int count = bookDao.insertBook(book);
if(count>0){
System.out.println("成功添加一本书!");
}
}
调用这个静态方法,运行结果如下:
查看数据库,可以看到成功的添加了一本书籍信息:
删除
根据书籍id删除对应的书籍信息
在IBookDao接口中创建删除方法:
public int deleteBookById(int id);//删除一本书
在IBookDaoImpl中实现这个方法:
@Override
public int deleteBookById(int id) {
SqlSession session = null;
int count = 0;
try {
//1.读取主配置文件mybatis-config.xml
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
//2.根据主配置文件mybatis-config.xml构建SqlSessionFactory对象factory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
//3.根据SqlSessionFactory对象创建SqlSession对象session
session = factory.openSession();
//4.调用SqlSession对象session的selectList方法执行查询数据库的操作,返回映射后的结果集合
count = session.insert("com.jiheng.dao.IBookDao.deleteBookById",id);
session.commit();
} catch (Exception e1) {
e1.printStackTrace();
}finally {
session.close();
}
return count;
}
编写映射文件BookMapper.xml,添加删除的语句:
<delete id="deleteBookById">
DELETE FROM books WHERE id=#{id}
</delete>
在TestBook01中新增方法用来测试代码:
public static void deleteBookById(int id){
IBookDao bookDao = new IBookDaoImpl();
int count = bookDao.deleteBookById(id);
if(count>0){
System.out.println("删除成功!");
}
}
到主方法也就是main方法里直接调用这个方法:
public static void main(String[] args) {
deleteBookById(5);
}
方法的参数给上想要删除的书籍id,这里我们给上5,把刚才添加的书删除,运行结果如下:
控制台显示已经删除成功,再到数据库里看,发现第五本书已经删除:
修改
把一本书的信息重新修改成我们想要的
在IBookDao接口中添加修改方法:
public int updateBook(Book book);//修改一本书
IBookImpl类中添加实现方法:
@Override
public int updateBook(Book book) {
SqlSession session = null;
int count = 0;
try {
//1.读取主配置文件mybatis-config.xml
String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
//2.根据主配置文件mybatis-config.xml构建SqlSessionFactory对象factory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
//3.根据SqlSessionFactory对象创建SqlSession对象session
session = factory.openSession();
//4.调用SqlSession对象session的selectList方法执行查询数据库的操作,返回映射后的结果集合
count = session.update("com.jiheng.dao.IBookDao.updateBook",book);
session.commit();
} catch (Exception e1) {
e1.printStackTrace();
}finally {
session.close();
}
return count;
}
映射文件BookMapper.xml中新添加一个修改语句:
<update id="updateBook">
UPDATE books SET bookname=#{bookname},author=#{author},category=#{category} WHERE id=#{id}
</update>
编写测试类TestBook01,新增方法:
public static void updateBook(){
IBookDao bookDao = new IBookDaoImpl();
Scanner input = new Scanner(System.in);
System.out.println("请输入你要修改的书籍编号:");
int id = input.nextInt();
Book book = bookDao.findBookById(id);
if(book!=null){
System.out.println("书籍信息如下:");
book.show();
System.out.println("修改书名:");
String bookname = input.next();
System.out.println("修改作者:");
String author = input.next();
System.out.println("修改分类:");
String category = input.next();
book.setId(id);
book.setBookname(bookname);
book.setAuthor(author);
book.setCategory(category);
bookDao.updateBook(book);
}else{
System.out.println("该学生不存在!");
}
}
最后在main方法里运行这个方法就可以,测试结果如下:
最后到数据库里查看,第一本书籍信息已经被成功修改了:
你学废了吗?