mapper代码
<?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="com.itheima.dao.IUserDao">
<!-- 查询所有 -->
<select id="findAll" resultType="com.itheima.domain.User">
select * from user ;
</select>
<!--保存用户-->
<insert id="saveUser" parameterType="com.itheima.domain.User">
insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
</insert>
<!--更新用户-->
<update id="updateUser" parameterType="com.itheima.domain.User">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}
</update>
<!--删除用户-->
<update id="deleteUser" parameterType="INT">
delete from user where id = #{userid}
</update>
<!--根据id查询用户-->
<select id="findById" parameterType="INT" resultType="com.itheima.domain.User">
select * from user where id = #{userid};
</select>
<!--根据姓名模糊查询用户-->
<select id="findByName" parameterType="String" resultType="com.itheima.domain.User">
select * from user where username like #{name};
</select>
<!--根据querVo的条件查询用户-->
<select id="findByVo" parameterType="com.itheima.domain.QueryVo" resultType="com.itheima.domain.User">
select * from user where username like #{user.username}
</select>
</mapper>
parameterType是表示参数类型,根据saveUser方法的user参数找到User实体类中的属性从而达到实现ORM(操作实体类来操作数据库)的目的。
保存用户操作中的values后面的内容保证程序可以取出User类中的各个属性值。
resultType可以指定结果集的类型,包含基本类型和实体类类型。
接口类代码
package com.itheima.dao;
import com.itheima.domain.QueryVo;
import com.itheima.domain.User;
import java.util.List;
/*
* 用户的持久层接口
*/
public interface IUserDao {
//查询所有用户
List<User> findAll();
//保存用户
void saveUser(User user);
//更新用户
void updateUser(User user);
//根据id删除用户
void deleteUser(Integer userId);
//根据id查询用户
User findById(Integer userId);
//根据名称模糊查询用户
List<User> findByName(String username);
//根据querVo的条件查询用户
List<User> findByVo(QueryVo vo);
}
jdbcConfig.properties配置文件
<?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>
<!--配置properties-->
<properties resource="jdbcConfig.properties">
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/day17"/>
<property name="username" value="root"/>
<property name="password" value="root"/>-->
</properties>
<typeAliases>
<package name="com.itheima.domain"/>
</typeAliases>
<!--配置环境-->
<environments default="mysql">
<!--配置mysql环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库连接池-->
<dataSource type="POOLED">
<!--配置连接数据的4个基本信息-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--<mapper resource="com/itheima/dao/IUserDao.xml"/>-->
<package name="com.itheima.dao"/>
</mappers>
</configuration>
测试类代码
/*
* 测试mybatis的crud操作
* */
public class mybatisTest {
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before//在测试方法之前执行
public void init() throws Exception {
//1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactoryg工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取SqkSession对象
sqlSession = factory.openSession();
//4.获取dao的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
}
@After//在测试方法之后执行
public void destory() throws Exception {
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
in.close();
}
@Test
public void testFindAll() {
//通过代理对象使用方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
//测试保存操作
@Test
public void testSave() {
User user = new User();
user.setUsername("mybatis saveuser");
user.setAddress("广州市");
user.setSex("男");
user.setBirthday(new Date());
System.out.println("before :" + user);
//.通过代理对象使用方法
userDao.saveUser(user);
}
// 测试更新操作
@Test
public void testUpdate() {
User user = new User();
user.setId(52);
user.setUsername("mybatis updateuser");
user.setAddress("广州市");
user.setSex("男");
user.setBirthday(new Date());
//通过代理对象使用方法
userDao.updateUser(user);
}
//测试删除操作
@Test
public void testDelet() {
//根据id删除用户操作
userDao.deleteUser(52);
}
//测试查询操作
@Test
public void testfindById() {
User user = userDao.findById(48);
System.out.println(user);
}
//测试模糊查询操作
@Test
public void testFindByName() {
List<User> users = userDao.findByName("%王%");
for (User user : users) {
System.out.println(user);
}
}
//测试QueryVo作为条件的查询操作
@Test
public void testFindByVo() {
QueryVo vo = new QueryVo();
User user = new User();
user.setUsername("%王%");
vo.setUser(user);
List<User> users = userDao.findByVo(vo);
for (User u : users) {
System.out.println(u);
}
}
}
配置标签小结
-properties (属性)
–property
-settings(全局配置参数)
–setting
–typeAliases(类型别名)
–typeAliase
–package
-plugins(插件)
-environments(环境集合属性对象)
–environment
—dataSource(数据源)
—transactionManager(事务管理)
-mappers(映射器)
–mapper
–package
resultMap结果类型
resultMap标签可以建立查询的列名和实体类的属性名不一致时建立对应关系,从而实现封装。在select标签中使用resultMap属性指定引用即可。