续上节
1.修改SqlMapConfig.xml配置文件
-
添加包扫描 类的与映射文件的,类的别名不区分大小写
<typeAliases>
<!-- 单个别名定义 别名不区分大小写-->
<!-- <typeAlias type="com.mybatis.domain.User" alias="user" /> -->
<!-- 包扫描,类的全程,不区分大小写 -->
<package name="com.mybatis.domain" />
</typeAliases>
<!-- 类扫描器
接口与映射文件在同一目录下
接口名称和映射文件名称一致-->
<!-- <mapper class="com.mybatis.mapper.UserMapper" /> -->
<!-- 映射文件包扫描
接口与映射文件在同一目录下
接口名称和映射文件名称一致-->
<package name="com.mybatis.mapper" />
<?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>
<typeAliases>
<!-- 单个别名定义 别名不区分大小写-->
<!-- <typeAlias type="com.mybatis.domain.User" alias="user" /> -->
<!-- 包扫描,类的全程,不区分大小写 -->
<package name="com.mybatis.domain" />
</typeAliases>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载映射文件 ,mapper url=配置文件引入从本地磁盘引入 -->
<mapper resource="mybatis/User.xml"/>
<!-- 类扫描器
接口与映射文件在同一目录下
接口名称和映射文件名称一致-->
<!-- <mapper class="com.mybatis.mapper.UserMapper" /> -->
<!-- 映射文件包扫描
接口与映射文件在同一目录下
接口名称和映射文件名称一致-->
<package name="com.mybatis.mapper" />
</mappers>
</configuration>
-
注意:映射文件包扫描时要满足:接口与映射文件在同一目录下;接口名称和映射文件名称一致
2.写接口
package com.mybatis.mapper;
import java.util.List;
import com.mybatis.domain.User;
public interface UserMapper {
User getUserById(int id);
List<User> getUserByUserName(String userName);
void insertUser(User user);
}
3.写映射文件
<?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">
<!-- 动态代理 开发规则:
namespace 和接口全路径名一致
SQL id 和接口方法名一致
接口入参和 parameterType类型一致
接口返回值和resultType类型一致-->
<mapper namespace="com.mybatis.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="user">
SELECT
`id`,
`username`,
`birthday`,
`sex`,
`address`
FROM `user`
WHERE id=#{id}
</select>
<!-- 如果返回为集合时,设置每个数据类型即可 -->
<select id="getUserByUserName" parameterType="string" resultType="com.mybatis.domain.User">
SELECT
`id`,
`username`,
`birthday`,
`sex`,
`address`
FROM `user`
WHERE username LIKE '%${value}%'
</select>
<!-- useGeneratedKeys使用自增,keyProperty结合使用,为user主键 -->
<insert id="insertUser" parameterType="com.mybatis.domain.User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO `user`
(`username`,
`birthday`,
`sex`,
`address`)
VALUES (#{username},
#{birthday},
#{sex},
#{address});
</insert>
</mapper>
-
注意: namespace 和接口全路径名一致;resultType="user"可以简写为类名不区分大小写
-
如果返回为集合时,设置每个数据类型即可
4.测试方法
package com.mybatis.test;
import static org.junit.Assert.*;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.mybatis.domain.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.utils.SqlSessionFactoryUtils;
public class UserMapperTest {
@Test
public void testGetUserById() {
SqlSession sql=SqlSessionFactoryUtils.getSql().openSession();
//接口代理实现类
UserMapper userMapper=sql.getMapper(UserMapper.class);
User user=userMapper.getUserById(26);
System.out.println(user);
sql.close();
}
@Test
public void testGetUserByUserName() {
SqlSession sql=SqlSessionFactoryUtils.getSql().openSession();
//接口代理实现类
UserMapper userMapper=sql.getMapper(UserMapper.class);
List<User> list=userMapper.getUserByUserName("百");
for(User user:list)
System.out.println(user);
sql.close();
}
@Test
public void testInsertUser() {
SqlSession sql=SqlSessionFactoryUtils.getSql().openSession();
//接口代理实现类
UserMapper userMapper=sql.getMapper(UserMapper.class);
User user = new User();
user.setUsername("百分百欧克10");
user.setSex("1");
user.setBirthday(new Date());
user.setAddress("天津");
userMapper.insertUser(user);
sql.commit();
sql.close();
}
}