搭建Mybatis 实现持久层(一)插入数据(完整)

搭建Mybatis 实现持久层简单例子

简单数据库编程,在使用MyBatis时,只需要指定需要执行的操作的抽象方法,并配置好对应的SQL语句即可

1.创建maven项目

(1)勾选创建简单项目

(2)相关参数

  • Group Id:cn.xxx.mybatis
  • Artifact Id:MyBatis
  • Packaging:war

2.添加相关依赖

pom.xml文件下,添加如下依赖

		<!-- spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.9.RELEASE</version>
		</dependency>

		<!-- 单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<!-- Mybatis依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.1</version>
		</dependency>
		<!-- Mybatis和spring整合依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.1</version>
		</dependency>
		<!--JDBC依赖,要与spring-webmvc版本一致。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.9.RELEASE</version>
		</dependency>
		<!-- 相关数据库连接的mysql-connector-java依赖 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.16</version>
		</dependency>
		<!-- 数据库连接池依赖 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>

3.创建数据库表

你可以自定义

字段 类型 非空
id int no
username varchar no
username varchar no
age int yes
phone varchar yes
email varchar yes

4.配置数据库连接信息

src/main/resources下创建db.properties数据库连接配置文件:

	url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
	driver=com.mysql.cj.jdbc.Driver
	username=root
	password=root
	initialSize=2
	maxActive=5

然后,创建xml文件,我这里命名spring-dao.xml
在里面读取刚创建的properties文件,并把读取到的连接信息使用Spring表达式信息注入到”BasicDataSource“的相关属性中

<!-- 读取db.properties -->
	<util:properties id="dbConfig"
		location="classpath:db.properties" />

<!-- 配置数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="url" value="#{dbConfig.url}" />
		<property name="driverClassName" value="#{dbConfig.driver}" />
		<property name="username"  value="#{dbConfig.username}"/>
		<property name="password" value="#{dbConfig.password}" />
		<property name="initialSize" value="#{dbConfig.initialSize}" />
		<property name="maxActive" value="#{dbConfig.maxActive}" />
	</bean>

5.测试数据库连接

为了测试以上配置是否正确,在src/test/java下创建cn.wt.mybatis.Tests测试类

public class Tests {
	private ClassPathXmlApplicationContext c;///创建 Spring 的 IOC 容器
	
	@Before
	public void init() {
		c = new ClassPathXmlApplicationContext("spring-dao.xml");	//,读取配置文件
	}
	
	@After
	public void destroy() {
		c.close();
	}
	
	@Test
	public void testDB() throws SQLException {
		BasicDataSource bean = c.getBean("dataSource",BasicDataSource.class);
		Connection conn = bean.getConnection();
		System.out.println(conn);
	}
}

右键Test()函数–>Run As -->JUnit Test 执行单元测试,输出数据库连接信息,连接成功。

6.创建实体类

(1) 先将用户的属性封装在1个类中,类的属性设计根据我之前创建的表,我这里创建cn.wt.mybatis.User类:

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String phone;
    private String email;
   
    //省略 setters/getters/toString
}

(2) 在MyBatis中,配置的抽象方法都必须存在于接口中,所以,首先需要创建封装抽象方法的cn.wt.mybatis.UserMapper接口,并在接口中添加“插入用户数据”的抽象方法:

public interface UserMapper {
	//插入用户数据,如果不关心受影响的行数,也可以使用void作为返回值类型
	Integer insert(User user);
}

(3) 配置MapperScannerConfigurer,使得MyBatis框架知道接口文件在哪里,所以,需要在spring-dao.xml中添加配置:

<!-- 配置MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 配置接口文件在哪里 -->
    <property name="basePackage" value="cn.wt.mybatis" />
</bean>

(4)在src/main/resources/下创建名为mappers的文件夹,再创建一个XML文件,我这命名为UserMapper.xml,一个接口对应一个mapper配置文件,在UserMapper.xml中配置SQL语句:

<!-- namespace:当前XML文件对应的接口 -->
<mapper namespace="cn.wt.mybatis.UserMapper">
	 <!-- 使用insert节点配置插入数据的SQL语句 -->
    <!-- id:对应的抽象方法的名称 -->
    <!-- 值列表中的#{}中的内容是User类中的属性名 -->
    <insert id="insert">
    	INSERT INTO t_user(
    		username,password,
    		age,phone,
    		email
    		) VALUES (
    			#{username},#{password},
    			#{age},#{phone},
    			#{email}
    		)
    </insert>
</mapper>

(5) 还需要配置使得MyBatis框架知道数据源是哪个,并且配置了SQL语句的XML在哪里,所以,在spring-dao.xml添加配置:

	<!-- SqlSessionFactoryBean -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
	 <!-- 使用哪个数据源 -->
	 	<property name="dataSource" ref="dataSource" />
	 <!-- 配置了SQL语句的XML文件在哪里 -->
	   <property name="mapperLocations" value="classpath:mappers/*.xml"/>
		
	</bean>

最后,编写并执行单元测试

在测试类新增全局变量

private UserMapper userMapper;

在之前写的init()函数写它的初始化

userMapper = c.getBean("userMapper",UserMapper.class);

新增测试方法

	@Test
	public void user() {
		User user = new User();
		user.setUsername("wt");
		user.setPassword("123");//只插入俩,你可以自行写其他的
		System.out.println(user);
		Integer row = userMapper.insert(user);
		System.out.println("row="+row);
		System.out.println(user);
	}

输出结果:

User [id=null, username=wt, password=123, age=null, phone=null, email=null]
row=1
User [id=null, username=wt, password=123, age=null, phone=null, email=null]

在数据库中也查到了相应的信息。

至此,已经完成用MyBatis搭建持久层,如有写的不对的地方,欢迎指正~

你可能感兴趣的:(Mybatis)