Mybatis增删改查(第二期)

在第一期我们简单的了解了一下框架的使用方法:
创建实体类成员属性对应数据库表的列名→编写主配置文件→根据实际业务编写接口以及接口的实现类→编写接口的映射文件→测试代码
在本期,依照上述方式分别实现增删改查,篇幅较长,搬好小板凳,安心食用

查询

根据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方法里运行这个方法就可以,测试结果如下:
在这里插入图片描述
最后到数据库里查看,第一本书籍信息已经被成功修改了:
在这里插入图片描述
你学废了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值