Mybatis注解方式
1、简单配置
配置mapper所在包(配置到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="jdbc.properties"/>
<!-- 定义别名-->
<typeAliases>
<typeAlias type="com.domain.User" alias="user"/>
</typeAliases>
<environments default="dev">
<environment id="dev">
<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>
<!-- 使用注解方式配置映射文件,注意配置到mapper包-->
<mappers>
<package name="com.mapper"/>
</mappers>
<!-- xml配置方式-->
<!-- <mappers>-->
<!-- <mapper resource="com/mapper/UserMapper.xml"/>-->
<!-- </mappers>-->
</configuration>
注解@Insert、@Delete…
package com.mapper;
import com.domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface UserMapper {
@Insert("insert into sys_user values (#{id}, #{username}, #{email}, #{password}, #{phoneNum})")
void addUser(User user);
@Delete(" delete from sys_user where id = #{id}")
void deleteUserById(long id);
@Update("update sys_user u set " +
"u.username=#{username}, u.password=#{password}, u.email=#{email}," +
" u.phoneNum=#{phoneNum}where u.id=#{id}")
void updateUser(User user);
@Select("select * from sys_user u where u.id=#{id}")
User findUserById(long id);
@Select("select * from sys_user")
List<User> findAll();
}
2、注解方式多表查询,一对一
方法一:
- 使用@Results注解代替resultMap标签
- 使用@Result注解代替result标签
- 其他实体可使用user.username方式访问配置
package com.mapper;
import com.domain.Order;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface OrderMapper {
@Select("SELECT *,o.id oid FROM sys_order o LEFT JOIN sys_user u ON(o.uid = u.id)")
@Results({
@Result(column = "oid", property = "id"),
@Result(column = "orderTime", property = "orderTime"),
@Result(column = "total", property = "total"),
@Result(column = "uid", property = "user.id"),
@Result(column = "username", property = "user.username"),
@Result(column = "password", property = "user.password"),
@Result(column = "email", property = "user.email"),
@Result(column = "phoneNum", property = "user.phoneNum")
})
List<Order> findAll();
}
方法二:
- one = @One指定一对一同时调用查询方法
- column 指定根据查询列名
- property 封装属性名
- javaType 封装类型
// 查询配置封装方法二
@Select("SELECT *,o.id oid FROM sys_order o LEFT JOIN sys_user u ON(o.uid = u.id)")
@Results({
@Result(column = "oid", property = "id"),
@Result(column = "orderTime", property = "orderTime"),
@Result(column = "total", property = "total"),
@Result(
column = "uid", // 封装属性名
property = "user", // 根据哪个字段查询表
javaType = User.class, // 要封装实体类型
// select表示调用查询接口
one = @One(select = "com.mapper.UserMapper.findUserById")
)
})
List<Order> findAll2();
2、注解方式多表查询,一对多
与一对一类似,封装进集合,调用其他接口进行查询
// 一对多查询
@Select("select * from sys_user")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password"),
@Result(column = "email", property = "email"),
@Result(column = "phoneNum", property = "phoneNum"),
@Result(
column = "id",
property = "orderList",
javaType = List.class,
many = @Many(select = "com.mapper.OrderMapper.findOrderByUid")
)
})
List<User> findUserAndOrder();