简单数据库编程,在使用MyBatis时,只需要指定需要执行的操作的抽象方法,并配置好对应的SQL语句即可
(1)勾选创建简单项目
(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>
你可以自定义
字段 | 类型 | 非空 |
---|---|---|
id | int | no |
username | varchar | no |
username | varchar | no |
age | int | yes |
phone | varchar | yes |
varchar | yes |
在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>
为了测试以上配置是否正确,在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 执行单元测试,输出数据库连接信息,连接成功。
(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搭建持久层,如有写的不对的地方,欢迎指正~