基于注解的MyBatis使用方法(一)

版权声明:欢迎评论交流,转载请注明原作者。 https://blog.csdn.net/m0_37809890/article/details/88381897

前言

MyBatis

MyBatis 是一款优秀的持久层框架,可以很方便的在java中实现对数据库的操作。
MyBatis 可以将sql语句映射为java接口函数,直接对实体进行操作。
MyBatis 的映射类(Mapper)在映射sql语句时有两种方式,一种是xml映射,功能强大;另一种是java注解,书写简便。

本文将通过示例来简单展示基于注解的MyBatis使用方法。

原理简介

MyBatis首先获得一个SqlSessionFactory对象,再由其产生若干个SqlSession对象。每个SqlSession对象所产生的Mapper对象都可以用来执行函数。
注意SqlSessionFactory对象应当只在程序运行过程中产生一次,可以考虑使用单例模式。SqlSession每次使用完成后需要关闭来释放数据库资源,可以使用try-with-resource.
在这里插入图片描述

项目下载地址

基于注解的MyBatis使用实例

项目示例

0. 建立项目

建立一个maven项目,在eclipse的包浏览器中呈现如下结构:(文末有项目示例的下载链接)
在这里插入图片描述

1. 建立数据库

在test数据库中建立了people表,主键id为int型且自动增加,还有一个类型为varchar(255)的name字段。
随意插入几条数据。
在这里插入图片描述

1. 安装MyBatis:

在/pom.xml中添加如下依赖,刷新项目。

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.4.0</version>
</dependency>

2.配置MyBatis:

在/src/main/resources下新建conf.xml,填充如下内容。
注意修改其中的数据库地址、账号、密码。
以及修改映射类的路径。

<?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>
    <!-- 
	    environments:开发模式
	    work:工作模式
	    default="development",id="development",两个的属性值必须一致
     -->    
     <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://192.168.137.212:3306/chunfeng_test?useUnicode=true&amp;characterEncoding=UTF-8"/>
                 <property name="username" value="root"/>
                 <property name="password" value="root"/>
             </dataSource>    
         </environment>
     </environments>
     
     <!-- 在配置文件中 关联包下的 接口类-->
     <mappers>
         <mapper class="com.fall.mybatistest.mapper.MainMapper"/>
     </mappers>
</configuration>

3. 建立实体类

在domain包下新建一个实体类People.java

package com.fall.mybatistest.domain;
public class People {
	private int id;
	private String name;
}

用eclipse自动填充getter(),setter(),hashcode(),equals(),toString()方法。

4. 建立映射类

在mapper包下新建映射接口类MainMapper(即conf.xml中指向的映射类)。

package com.fall.mybatistest.mapper;
public interface MainMapper {

}

当需要映射语句时,在这里新建函数并配置注解,比如建立一个根据id查找的函数:
MyBatis会自动将查找结果转化成实体类。

public interface MainMapper {
	@Select("SELECT * FROM people WHERE id=#{id}")
	public People selectById(int id);
}

注意注解的sql语句使用#{<name>}来接收参数。
当参数不止一个时,要在函数参数前加@Param("<name>")来标识参数名。

5. 建立utils类

在utils包下建立MyBatisUtils类,这个类只会创建一次factory。

package com.fall.mybatistest.utils;
public class MyBatisUtils 
{
	static SqlSessionFactory factory;
    public static SqlSession getSession()
    {
    	if(factory==null)
    	{
    		String resource="conf.xml";
            InputStream is = MyBatisUtils.class.getClassLoader().getResourceAsStream(resource);
            factory = new SqlSessionFactoryBuilder().build(is);
    	}
        return factory.openSession();
    }
}

6. 测试

建立测试类Test.java

package com.fall.mybatistest;

public class Test 
{
	public static void main(String[] args) throws IOException 
	{	
		try(SqlSession session = MyBatisUtils.getSession())
		{
			MainMapper mapper = session.getMapper(MainMapper.class);
			
			People people = mapper.selectById(2);
			System.out.println(people);
		}
	}
}

结果如下:
People [id=2, name=cutes];

7. 其它测试

进行增/删/改/查/查全部 五个测试:
首先修改MainMapper:

public interface MainMapper {
	@Select("SELECT * FROM people")
	public ArrayList<People> selectAll();
	
	@Select("SELECT * FROM people WHERE id=#{id}")
	public People selectById(int id);
	
	@Update("UPDATE people SET name=#{name} WHERE id=#{id}")
	public boolean updateNameById(@Param("id") int id, @Param("name") String name);
	
	@Insert("INSERT INTO people(name) VALUES (#{name})")
	public boolean insertByName(String name);
	
	@Delete("DELETE FROM people WHERE id=#{id}")
	public boolean deleteById(int id);
}

修改Test.java如下:

public class Test 
{
	public static void main(String[] args) throws IOException 
	{	
		System.out.println("--- insert ---");
		testInsert();
		System.out.println("--- select ---");
		testSelect();
		System.out.println("--- select all ---");
		testSelectAll();
		System.out.println("--- update ---");
		testUpdate();
		System.out.println("--- delete ---");
		testDelete();
		
		System.out.println("done");
	}
	static void testInsert()
	{
		try(SqlSession session = MyBatisUtils.getSession())
		{
			MainMapper mapper = session.getMapper(MainMapper.class);
			boolean success = mapper.insertByName("qq");
			System.out.println(success);
			
			session.commit();
		}
	}
	static void testSelect()
	{
		try(SqlSession session = MyBatisUtils.getSession())
		{
			MainMapper mapper = session.getMapper(MainMapper.class);
			
			People people = mapper.selectById(2);
			System.out.println(people);
			
			session.commit();
		}
	}
	static void testSelectAll()
	{
		try(SqlSession session = MyBatisUtils.getSession())
		{
			MainMapper mapper = session.getMapper(MainMapper.class);
			
			List<People> list = mapper.selectAll();
			System.out.println(list);
			
			session.commit();
		}
	}
	static void testUpdate()
	{
		try(SqlSession session = MyBatisUtils.getSession())
		{
			MainMapper mapper = session.getMapper(MainMapper.class);
			
			boolean success = mapper.updateNameById(2,"cutes");
			System.out.println(success);
			
			session.commit();
		}
	}
	static void testDelete()
	{
		try(SqlSession session = MyBatisUtils.getSession())
		{
			MainMapper mapper = session.getMapper(MainMapper.class);
			
			boolean success = mapper.deleteById(3);
			System.out.println(success);
			
			session.commit();
		}
	}
}

结果如下:
在这里插入图片描述
最后的delete出现false是因为之前已经将那条记录删除,所以删除失败。

注意:update,select,delete操作在执行完成后需要进行session.commit()才能使得操作生效。


总结

本文简要介绍了MyBatis基于注解的使用方式,MyBatis还有其它的使用方式将在后续更新。

参考资料

  1. Mybatis框架基于注解的方式,实现对数据增删改查
  2. Mybatis Java API

猜你喜欢

转载自blog.csdn.net/m0_37809890/article/details/88381897