Eclipse中创建MyBatis项目

1. 创建MyBatis项目

创建Maven Project,Group Id使用cn.tedu.mybatis,Artifact Id使用MyBatis,Packaing选择war(也可以选择jar)。

项目创建出来后,需要:生成web.xml文件;在pom.xml中添加依赖;从前序项目中复制spring-mvc.xml到当前项目;添加Tomcat运行环境(此案例可以不需要);打开前序项目的web.xml,将DispatcherServlet和CharacterEncodingFilter的配置复制到当前项目中。

本次另外需要添加依赖:

<!-- 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>

<!-- SpringJDBC -->
<!-- 注意:与当前项目使用的其它spring依赖保持相同的版本号 -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>4.3.10.RELEASE</version>
</dependency>

<!-- mysql连接 -->
<!-- 可选版本号:8.0.12~8.0.16,5.1.4~5.1.6 -->
<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>

<!-- 单元测试 -->
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
</dependency>

然后,将spring-mvc.xml复制一份,得到spring-dao.xml,删除spring-dao.xml文件内的配置!

2. 数据库连接

在src/main/resources下创建db.properties文件,用于配置数据库连接的相关信息:

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

在配置driver属性时,需要注意所使用的mysql-connector-java的版本,如果使用的5.x版本,该属性值应该是com.mysql.jdbc.Driver,如果使用的是6.x或更高版本,该属性值应该是com.mysql.cj.jdbc.Driver,如果不确定到底应该用哪个值,可以展开mysql-connector-java的jar包文件来观察!另外,在该jar包中还有META-INF/services/java.sql.Driver文件,该文件内记录的就是使用该jar包时应该使用的Driver类。

如果使用的是6.x或以上版本的mysql-connector-java,在配置连接数据库的URL时,还必须显式的设置serverTimezone参数的值!在中国大陆地区可使用的值有Asia/Shanghai和Asia/Chongqing。

需要在spring-dao.xml中添加配置,读取以上db.properties中的配置信息:

<util:properties id="config" location="classpath:db.properties" />

然后,连接数据库时,使用到的数据源将是BasicDataSource,则需要将以上读取到的数据库连接信息注入到BasicDataSource的属性中去:

<!-- 配置数据源,保证其能够连接数据库 -->
<bean id="dataSource"
	class="org.apache.commons.dbcp.BasicDataSource">
	<property name="url" value="#{config.url}" />
	<property name="driverClassName" value="#{config.driver}" />
	<property name="username" value="#{config.username}" />
	<property name="password" value="#{config.password}" />
	<property name="initialSize" value="#{config.initialSize}" />
	<property name="maxActive" value="#{config.maxActive}" />
</bean>

然后,可以在测试类中,编写并执行单元测试,以检查配置是否正确:

public class Tests {
	
	ClassPathXmlApplicationContext ac;
	
	@Before
	public void doBefore() {
		ac = new ClassPathXmlApplicationContext(
				"spring-dao.xml");
	}
	
	@After
	public void doAfter() {
		ac.close();
	}
	
	@Test
	public void getConnection() throws SQLException {
		BasicDataSource dataSource = ac.getBean("dataSource", BasicDataSource.class);
		Connection conn = dataSource.getConnection();
		System.out.println(conn);
	}

}

3. 接口与抽象方法

暂定目标:使用MyBatis向数据表中插入新的用户数据。

扫描二维码关注公众号,回复: 12049825 查看本文章

使用MyBatis时,需要定义各功能对应的抽象方法,这些抽象方法必须定义在接口中!

首先,应该创建cn.tedu.mybatis.UserMapper接口文件,然后,在接口中定义“插入用户数据”的抽象方法,关于抽象方法的设计原则:

  • 如果需要执行的是增、删、改类型的操作,则使用Integer作为方法的返回值,将表示“受影响的行数”,可用于判断操作成功与否,也可以设计为int,还可以设计为void表示不关心受影响的行数;
  • 方法名称可以自定义,不可以重载;
  • 参数列表根据所需要的参数来决定,可以参考此前学习JDBC时,SQL中有哪些问号,就写哪些参数。

此次“插入用户数据”需要执行的SQL语句大致是:

insert into (username, password, age, phone, email) values (?,?,?,?,?)

则抽象方法需要写5个参数,如果后续该数据表增加了更多的字段,则需要写更多参数,这种做法是有缺陷的,应该将这些参数封装到cn.tedu.mybatis.User类中:

public class User {

	private Integer id;
	private String username;
	private String password;
	private Integer age;
	private String phone;
	private String email;

}

则抽象方法可以设计为:

Integer insert(User user);

接下来,需要配置“接口文件在哪里”,以保证后续MyBatis框架工作时,能找到该接口:

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

下载编写配置文件的XML文件压缩包。

在src/main/resources下创建名为mappers的文件夹,并将压缩包中的SomeMapper.xml复制到该文件夹下。

注意:在MyBatis中用于配置SQL语句的XML文件必须包括以下声明,否则将无法正常使用!

<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

在配置该XML文件时,首先,需要添加根节点,且必须配置namespace属性,该属性值表示对应哪个接口文件:

<!-- namespace:对应哪个接口 -->
<mapper namespace="cn.tedu.mybatis.UserMapper">

</mapper>

然后,根据所需要执行的SQL语句的种类,从、、、中选择子级节点,节点的id属性就是抽象方法的名称,然后,在节点内容编写需要执行的SQL语句,参数部分使用#{}格式的占位符,占位符内部的名称是方法的参数User类中的属性名:

<!-- id:抽象方法的名称 -->
<insert id="insert">
	INSERT INTO t_user (
		username, password, 
		age, phone, 
		email
	) VALUES (
		#{username}, #{password},
		#{age}, #{phone},
		#{email}
	)
</insert>

然后,还需要配置“XML文件在哪里”,及框架执行时,“使用哪个数据源连接数据库”!所以,需要在spring-dao.xml中添加配置:

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

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

@Test
public void insert() {
	User user = new User();
	user.setUsername("zhaoqi");
	user.setPassword("888999");
	user.setPhone("010-88888888");
	Integer rows = userMapper.insert(user);
	System.out.println("rows=" + rows);
}

猜你喜欢

转载自blog.csdn.net/qq_37669050/article/details/102403362