mybatis学习笔记(三)
6. 分页
1. Limit 分页
语法:
SELECT * from user limit startIndex,pageSize;
SELECT * from user limit 0,2;
package tzy.tzytry.dao;
import com.hou.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//根据id查询用户
User getUserById(int id);
List<User> getUserByLimit(Map<String, Integer> map);
}
xml
<?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">
<!--namespace绑定一个对应的mapper接口-->
<mapper namespace="com.hou.dao.UserMapper">
<select id="getUserById" resultMap="UserMap"
parameterType="int">
select * from mybatis.user where id = #{id}
</select>
<!--结果集映射-->
<resultMap id="UserMap" type="User">
<!--colunm 数据库中的字段,property实体中的属性-->
<!--<result column="id" property="id"></result>-->
<!--<result column="name" property="name"></result>-->
<result column="pwd" property="password"></result>
</resultMap>
<select id="getUserByLimit" parameterType="map"
resultType="User" resultMap="UserMap">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
</mapper>
test类
@Test
public void getByLimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("startIndex", 1);
map.put("pageSize", 2);
List<User> userList = mapper.getUserByLimit(map);
for(User user:userList){
System.out.println(user);
}
sqlSession.close();
}
2. RowBounds分页
@Test
@Test
public void getUserByRow(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//RowBounds实现
RowBounds rowBounds = new RowBounds(1, 2);
//通过java代码层面
List<User> userList = sqlSession.selectList
("com.hou.dao.UserMapper.getUserByRowBounds",
null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
3. 分页插件
7. 使用注解开发
-
删除 UserMapper.xml
-
UserMapper
package tzy.tzytry.dao; import com.hou.pojo.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserMapper { @Select("select * from user") List<User> getUsers(); } -
核心配置 mybatis-config.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> <!--引入外部配置文件--> <properties resource="db.properties"/> <!--可以给实体类起别名--> <typeAliases> <typeAlias type="tzy.tzytry.pojo.User" alias="User"></typeAlias> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--绑定接口--> <mappers> <mapper class="tzy.tzytry.Dao.UserMapper"></mapper> </mappers> </configuration>本质:反射机制
底层:动态代理!
Mybatis详细执行流程:
- Resource获取全局配置文件
- 实例化SqlsessionFactoryBuilder
- 解析配置文件流XMLCondigBuilder
- Configration所有的配置信息
- SqlSessionFactory实例化
- trasactional事务管理
- 创建executor执行器
- 创建SqlSession
- 实现CRUD
- 查看是否执行成功
- 提交事务
- 关闭
注解CRUD
package tzy.tzytry.dao;
import com.hou.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Select("select * from user")
List<User> getUsers();
//方法存在多个参数,所有的参数必须加@Param
@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);
@Insert("insert into user (id, name, pwd) values" +
"(#{id},#{name},#{password})")
int addUser(User user);
@Update("update user set name=#{name}, pwd=#{password} " +
"where id=#{id}")
int updateUser(User user);
@Delete("delete from user where id=#{id}")
int deleteUser(@Param("id") int id);
}
MybatisUtile
package tzy.tzytry.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
//sqlSessionFactory --> sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
}
Test
package tzy.tzytry.dao;
import com.hou.pojo.User;
import com.hou.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
// 获得sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
// 1.执行 getmapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.getUsers();
for (User user : userList) {
System.out.println(user);
}
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭
sqlSession.close();
}
}
@Test
public void getuserById(){
// 获得sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
// 1.执行 getmapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
User user = userDao.getUserById(1);
System.out.println(user);
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭
sqlSession.close();
}
}
@Test
public void addUser(){
// 获得sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
// 1.执行 getmapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
userDao.addUser(new User(6, "kun","123"));
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭
sqlSession.close();
}
}
@Test
public void updateUser(){
// 获得sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
// 1.执行 getmapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
userDao.updateUser(new User(6, "fang","123"));
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭
sqlSession.close();
}
}
@Test
public void deleteUser(){
// 获得sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
// 1.执行 getmapper
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
userDao.deleteUser(6);
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭
sqlSession.close();
}
}
}
8. Lombok
-
在IDEA中安装lombok插件
-
配置
<dependencies> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </dependency> </dependencies> -
@Getter and @Setter @FieldNameConstants @ToString @EqualsAndHashCode @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog @Data @Builder @SuperBuilder @Singular @Delegate @Value @Accessors @Wither @With @SneakyThrows@Data: 无参构造,get,set,toString,hashCode,equals
在实体类上加注解
package tzy.tzytry.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String password; }

浙公网安备 33010602011771号