创建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的配置复制到当前项目中。
本次另外需要添加依赖:
org.mybatis
mybatis
3.5.1
org.mybatis
mybatis-spring
2.0.1
org.springframework
spring-jdbc
4.3.10.RELEASE
mysql
mysql-connector-java
8.0.16
commons-dbcp
commons-dbcp
1.4
junit
junit
4.12
然后,将spring-mvc.xml复制一份,得到spring-dao.xml,删除spring-dao.xml文件内的配置!
在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中的配置信息:
然后,连接数据库时,使用到的数据源将是BasicDataSource,则需要将以上读取到的数据库连接信息注入到BasicDataSource的属性中去:
然后,可以在测试类中,编写并执行单元测试,以检查配置是否正确:
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);
}
}
暂定目标:使用MyBatis向数据表中插入新的用户数据。
使用MyBatis时,需要定义各功能对应的抽象方法,这些抽象方法必须定义在接口中!
首先,应该创建cn.tedu.mybatis.UserMapper接口文件,然后,在接口中定义“插入用户数据”的抽象方法,关于抽象方法的设计原则:
此次“插入用户数据”需要执行的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框架工作时,能找到该接口:
下载编写配置文件的XML文件压缩包。
在src/main/resources下创建名为mappers的文件夹,并将压缩包中的SomeMapper.xml复制到该文件夹下。
注意:在MyBatis中用于配置SQL语句的XML文件必须包括以下声明,否则将无法正常使用!
在配置该XML文件时,首先,需要添加根节点,且必须配置namespace属性,该属性值表示对应哪个接口文件:
然后,根据所需要执行的SQL语句的种类,从、、、中选择子级节点,节点的id属性就是抽象方法的名称,然后,在节点内容编写需要执行的SQL语句,参数部分使用#{}格式的占位符,占位符内部的名称是方法的参数User类中的属性名:
INSERT INTO t_user (
username, password,
age, phone,
email
) VALUES (
#{username}, #{password},
#{age}, #{phone},
#{email}
)
然后,还需要配置“XML文件在哪里”,及框架执行时,“使用哪个数据源连接数据库”!所以,需要在spring-dao.xml中添加配置:
最后,编写并执行单元测试:
@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);
}