MyBatis中映射文件的输入映射为pojo包装类型
自定义pojo类(User.java)
package com.hl.myabtis.first.beas;
import java.util.Date;
public class User {
private int id;
private String username;
private char sex;
private Date birthday;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}
}
自定义pojo类的增强类(UserCustomer .java)
package com.hl.myabtis.first.beas;
/**
* 用户增强类
* @author 浪丶荡
*
*/
public class UserCustomer extends User{
//可以扩展用户类
}
用于综合查询的包装类(UserQueryVo .java)
package com.hl.myabtis.first.beas;
/**
* 查询用户包装类型
* @author 浪丶荡
*
*/
public class UserQueryVo extends User{
//包装用户类增强类
private UserCustomer userCustomer;
//还可以包装其他的(订但、商品等)
public UserCustomer getUserCustomer() {
return userCustomer;
}
public void setUserCustomer(UserCustomer userCustomer) {
this.userCustomer = userCustomer;
}
}
Mapper接口(UserMapper.java)
package com.hl.mybatis.first.mapper;
import java.util.List;
import com.hl.myabtis.first.beas.User;
import com.hl.myabtis.first.beas.UserCustomer;
import com.hl.myabtis.first.beas.UserQueryVo;
public interface UserMapper {
//根据id查询用户信息
public User findUserById(int id) throws Exception;
//添加用户信息
public void insertUser(User user);
//根据id删除用户
public void deleteUser(int id);
//根据用户姓名模糊查找
public List<User> findUserByName(String name);
//用户信息的综合查询
public List<UserCustomer> fingUserList(UserQueryVo userQueryVo) throws Exception;
}
mapper.xml映射文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 对sql进行分开处理,隔离 -->
<mapper namespace="com.hl.mybatis.first.mapper.UserMapper">
<!-- 执行数据库的查询 ID用来标识次sql语句,称为Statement的ID
#{}表示一个占位符
parameterType指定输入参数类型
id:接收参数名叫id,如果参数为简单类型,参数名随意
resultType:输出结果的类型,单条记录所映射的对象类。
-->
<select id="findUserById" parameterType="int" resultType="user">
select * FROM user WHERE id = #{id}
</select>
<!--${value}表示sql拼接串 -->
<select id="findUserByName" parameterType="String" resultType="user">
select * FROM user WHERE address LIKE '%${value}%'
</select>
<!-- 用户信息的综合查询
查询条件很复杂
-->
<select id="fingUserList" parameterType="com.hl.myabtis.first.beas.UserQueryVo" resultType="com.hl.myabtis.first.beas.UserCustomer">
select * from user where user.sex=#{userCustomer.sex} or user.address like '$%{userCustomer.address}%'
</select>
<!-- 添加用户
SELECT_LAST_INSERT_ID()只适用于自增长情况
keyProperty:将查询到的结果设置到parameterType指定的属性
order:执行顺序,在插入后执行
resultType:结果类型
-->
<insert id="insertUser" parameterType="user">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 删除
parameterType:参数类型
-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{value}
</delete>
<!-- 更新
需求:根据ID更新用户信息
parameterType:需要更新的用户信息
#{id}:从输入的user对象中获取ID属性,名称需要和属性名一致
-->
<update id="updateUserByID" parameterType="user">
update user set username = #{username},birthday = #{birthday},sex = #{sex},address = #{address} where id = #{id}
</update>
</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>
<!-- 加载属性文件 -->
<properties resource="db.properties" />
<!--
全局配置
<settings>
</settings> -->
<!-- 别名 -->
<typeAliases>
<!-- 单个定义别名
<typeAlias type="com.hl.myabtis.first.beas.User" alias="user"/>
-->
<!-- 批量定义别名
指定包名,MyBatis会自动扫描包内类,自动定义别名,别名就是类名,首字母不区分大小写
-->
<package name="com.hl.myabtis.first.beas"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<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="sqlmap/user.xml"/>
<mapper class="com.hl.mybatis.first.mapper.UserMapper"/>
</mappers>
</configuration>
db参数:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/MyBatis?useUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=123456
测试类:
@Test
public void testfindUserList() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
//构建一个包装类
UserQueryVo userQueryVo = new UserQueryVo();
//构建一个增强类
UserCustomer userCustomer = new UserCustomer();
userCustomer.setAddress("明月");
userCustomer.setSex('1');
//包装类包装这增强类作为查询条件
userQueryVo.setUserCustomer(userCustomer);
List<UserCustomer> userList = usermapper.fingUserList(userQueryVo);
sqlSession.close();
for (UserCustomer user : userList) {
System.out.println(user);
}
}