Mybatis通用mapper
通用Mapper就是为了解决单表增删改查,基于Mybatis的插件机制。开发人员不需要编写SQL,不需要在DAO中增加方法,只要写好实体类,就能支持相应的增删改查方法
使用方法
1.在pom.xml中引入mapper的依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.1.2</version>
</dependency>
2.Mybatis配置文件中完成配置
<plugins>
<plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor">
<!--指定当前通用mapper接口使用的是哪一个-->
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
</plugin>
</plugins>
3.实体类设置主键
//表明该表与数据库表的映射关系
@Table(name = "user")
public class User{
@Id //对应的是主键id
/*设置主键的生成策略(主键自增)
-AUTO主键由程序控制,是默认选项,不设置就是这个
-IDENTITY 主键由数据库生成,采用数据库自增长,Oracle不支持这种方式
-SEQUENCE 通过数据库的序列产生主键,MYSQL 不支持
-TABLE 提供特定的数据库产生主键,该方式更有利于数据库的移植*/
@GeneratedValue(strategy = GenerationType.IDENTITY) //
private Integer id;
//若该字段与数据库表中不一致,使用@Column()注解可进行设置
private String username;
//省略get,set等方法
}
4.定义通用mapper
import com.tong.pojo.User;
import tk.mybatis.mapper.common.Mapper;
public interface UserMapper extends Mapper<User> {
}
5.测试
@Test
public void mapperTest() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(1);
//通用mapper定义了很多方法,如下图所示
User user1 = userMapper.selectOne(user);
System.out.println(user1);
//(1) mapper基础接口
//select接口
User user2=userMapper.selectOne(user);//根据实体中的属’l生进行查询,只能有一个返回值
List<User> users=userMapper.select(null);//查询全部结果
userMapper.selectByPrimaryKey(1);//根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
userMapper.selectCount(user);//根据实体中的属’}生查询总数,查询条件使用等号
//insert接口
int insert=userMapper.insert(user);//保存一个实体,null值也会保存,不会使用数据库默认值
int i=userMapper.insertSelective(user);//保存实体,null的属’l生不会保存,会使用数据库默认值
//update接口
int i1=userMapper.updateByPrimaryKey(user);//根据主键更新实体全部字段,null值会被更新
//delete接口
int delete=userMapper.delete(user);//根据实体属’}生作为条件进行删除,查询条件使用等号
userMapper.deleteByPrimaryKey(1);//根据主键字段进行删除,方法参数必须包含完整的主键属性
//2.example方法
Example example = new Example(User.class);//传递操作的实体类
//example.createCriteria()构建查询所有的操作
//andEqualTo()拼接一个id为1的条件(where id = 1)
example.createCriteria().andEqualTo("id",1);
//将构建的example对象传入
List<User> users = mapper.selectByExample(example);
//打印输出
for (User user2 : users) {
System.out.println(user2);
}
}