1.配置MyBatis
首先在MySQL数据库中创建简单测试的数据库
然后在项目src/main/java上新建一个实体的包: org.first.entity 和dao层的包:org.first.dao
在entity包下创建实体类,User.java (实体类名与表名一致)
public class User {
private int id;
private String name;
private int sex;
private Date createTime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", sex=" + sex +
", createTime=" + createTime +
'}';
}
}
在dao包中创建Dao接口,UserDao.java
public interface UserDao {
/**
* 根据偏移量查询用户列表
* @param offser
* @param limit
* @return
*/
List<User> queryAll(@Param("offset") int offser,@Param("limit") int limit);
int insertUser(User user);
}
在src/main/resources下创建MyBatis配置文件mybatis-config.xml 和 mapper包(存放MyBatis的SQL映射)
打开MyBatis的官方文档
点击打开链接
选择入门标签,找到MyBatis全局配置 复制dtd 到 mybatis-config.xml 中开始配置MyBatis
<?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>
<!-- 配置全局属性 -->
<settings>
<!-- 使用jdbc的getGeneratedKeys 获取数据可自增主键值 -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 使用列别名替代列名 默认:true -->
<setting name="useColumnLabel" value="true"/>
<!-- 开启驼峰命名转换:Table(create_time)-> Entity(createTime) -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
使用mapper实现Dao接口,在mapper包下创建 UserDao.xml,在官方文档xml配置找到他的事例,复制dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.first.dao.UserDao">
<!-- 为DAO接口方法提供SQL语句配置 -->
<!-- 根据方法选择标签update,delete,select,insert-->
<select id="queryAll" resultType="User">
select id,name,sex,create_time
from user
order by create_time desc
limit #{offset},#{limit}
</select>
<insert id="insertUser" parameterType="User">
insert into user (id,name,sex,create_time)
values (#{id},#{name},#{sex},now())
</insert>
</mapper>
namespace为Dao的路径,id为Dao的方法名,resultType为返回值类型,parameterType为传入参数类型
2.MyBatis整合Spring
实现更少的编码,只写接口,不写实现。
在src/main/resources下创建jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
username=你的用户名
password=你的密码
在src/main/resources下创建spring包,并创建spring-dao.xml 配置所有dao相关的配置
查看spring的官方文档:(根据自己的版本号选择)
选择pdf查看官方文档,编写xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置整合MyBatis -->
<!-- 1:配置数据库相关参数 -->
<context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="FALLBACK"/>
<!-- 2:数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 配置连接池属性 -->
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<!-- c3p0连接池的私有属性 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<property name="autoCommitOnClose" value="false"/>
<property name="checkoutTimeout" value="1000"/>
<!-- 当获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!-- 3:配置SQLSessionFactory对象 -->
<bean id="sqlSessionFactroy" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置MyBatis全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="org.first.entity"/>
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 4:配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入SQLSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactroy"/>
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="org.first.dao"/>
</bean>
</beans>
注意:jdbc.properties中的username会从系统环境中读取用户名,据我所知有两种解决方法:
(1)修改jdbc.properties中的username为jdbc.username
(2)在spring-dao.xml的context标签中添加
system-properties-mode="FALLBACK"
我在该例中使用的是第二种方法。
可自行用junit测试。
@RunWith(SpringJUnit4ClassRunner.class)
/*junit加载spring配置文件*/
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class UserDaoTest {
@Resource
private UserDao userDao;
@Test
public void queryAll() throws Exception {
List<User> users=userDao.queryAll(0,5);
for(User user:users){
System.out.println(user);
}
}
@Test
public void insertUser() throws Exception {
User user=new User();
user.setName("小花");
user.setSex(0);
int result=userDao.insertUser(user);
System.out.println(result);
}
}