Mybatis—接口实现增删改查和分页查询
一 创建UserMapper接口
package com.yuyi.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.yuyi.pojo.User;
public interface UserMapper {
@Insert("insert into user(username) values (#{username})")
public int addUser(User user);
@Select("select * from user where id=#{id}")
public User getUserById(int id);
@Delete("DELETE FROM user WHERE id=#{id}")
public void deleteUser(int id);
@Select("SELECT * from user")
public List<User> findAllUser();
@Select("select * from user limit #{start},#{count} ")
public List<User> listByPage(@Param("start") int start, @Param("count")int count);
@Select("select count(*) from user")
public int count();
}
二 配置SqlMapConfig.xml文件
<?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>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="账号" />
<property name="password" value="密码" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.yuyi.mapper.UserMapper"/>
</mappers>
</configuration>
三 测试
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import com.yuyi.mapper.UserMapper;
import com.yuyi.pojo.User;
import com.yuyi.util.SqlSessionFactoryUtil;
public class UserTest {
@Test
public void testGetUserById() {
SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession=sessionFactory.openSession(true);
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.getUserById(27);
System.out.println(user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testAddUser() {
SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession=sessionFactory.openSession(true);
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=new User();
user.setUsername("xxx");
userMapper.addUser(user);
}
@Test
public void testDeleteUser() {
SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession=sessionFactory.openSession(true);
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
userMapper.deleteUser(127);
}
@Test
public void testFindAllUser() {
SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession=sessionFactory.openSession(true);
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<User> listUser=userMapper.findAllUser();
for (User user : listUser) {
System.out.println(user.getUsername());
}
}
@Test
public void testListByPage() {
SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession=sessionFactory.openSession(true);
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<User> listUser=userMapper.listByPage(2, 100);
for (User user : listUser) {
System.out.println(user.getUsername());
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void testCount() {
SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession sqlSession=sessionFactory.openSession(true);
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
int count=userMapper.count();
System.out.println("总数为:"+count);
sqlSession.commit();
sqlSession.close();
}
}
四 DTD文件的配置
window——preferences——XML——XML Catalog——Add
配置好mapper.dtd和config.dtd后再重新打开后就会有相应的提示
五 配置文件
environments环境
MyBatis可以配置多种环境,比如开发、测试和生
产环境需要有不同的配置。
• 每种环境使用一个environment标签进行配置并指
定唯一标识符
• 可以通过environments标签中的default属性指定
一个环境的标识符来快速的切换环境
environment-指定具体环境
id:指定当前环境的唯一标识
• transactionManager、和dataSource都必须有
transactionManager
type: JDBC | MANAGED | 自定义
– JDBC:使用了 JDBC 的提交和回滚设置,依赖于从数
据源得到的连接来管理事务范围。
JdbcTransactionFactory
– MANAGED:不提交或回滚一个连接、让容器来管理
事务的整个生命周期(比如 JEE 应用服务器的上下
文)。 ManagedTransactionFactory
– 自定义:实现TransactionFactory接口,type=全类名/
别名
dataSource
type: UNPOOLED | POOLED | JNDI | 自定义
– UNPOOLED:不使用连接池,
UnpooledDataSourceFactory
– POOLED:使用连接池, PooledDataSourceFactory
– JNDI: 在EJB 或应用服务器这类容器中查找指定的数
据源
– 自定义:实现DataSourceFactory接口,定义数据源的
获取方式。
• 实际开发中我们使用Spring管理数据源,并进行
事务控制的配置来覆盖上述配置
六 SqlSession
SqlSession 的实例不是线程安全的,因此是不能
被共享的。
• SqlSession每次使用完成后需要正确关闭,这个
关闭操作是必须的
• SqlSession可以直接调用方法的id进行数据库操
作,但是我们一般还是推荐使用SqlSession获取
到Dao接口的代理类,执行代理对象的方法,可
以更安全的进行类型检查操作
在此我向大家推荐一个架构学习交流群。交流学习群号:938837867 暗号:555 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备