添加约束
一. 基本标签
- 标签:select,delete,insert,update属性:
namespace:命名空间resultType:查询结果对应的实体类型parameterType:传入参数对象的类型(Integer可直接写int)id:语句标识符,与命名空间共同组成查询标识
public static void main(String[] args) throws IOException {
//配置condition条件
User condition = new User();
condition.setId(2);
condition.setUsername("bao");
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得mapper对象
UserMapper userMapper = (UserMapper) sqlSession.getMapper(UserMapper.class);
//执行操作
List user = userMapper.findByCondition(condition);
System.out.println(user);
}
当condition的password未设置条件(即为null)时,能正确返回user
2. choose(when,otherwise) 3. trim(where,set) 4. foreach可以找到id=1或id=2的user
@Test
public void test2() throws IOException {
//配置condition条件
List list = new ArrayList();
list.add(2);
list.add(1);
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得mapper对象
UserMapper userMapper = (UserMapper) sqlSession.getMapper(UserMapper.class);
//执行操作
List user = userMapper.findByIds(list);
System.out.println(user);
}
三. sql标签:SQL的片段抽取
Mybatis核心配置文件select * from user
添加约束:
1. environments标签
environments
transactionManager的type参数
♥JDBC:直接使用JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理事务作用域MANAGED:不常用 dataSource的type参数:
UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。♥POOLED:这种数据源的实现利用“池”的概念将JDBC 连接对象组织起来。JNDl:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI 上下文的引用。 2. mappers标签
mappers标签
作用:加载映射文件方式:
♥使用相对于类路径的资源引用,例如:
作用:加载额外配置的properties文件,如数据源的配置信息的文件
4. typeAliases标签
作用:自定义别名mybatis已配置好的的别名:
string、int、long、double、boolean自定义步骤:
使用:
5. typeHandlers标签
typeHandlers标签
类处理器:mybatis在预处理语句中设置一个参数和从结果集取出一个值时,都会用类处理器将获取的值以合适的方式转换成java类型。默认类处理器:
重写类型处理器和自定义类型处理器
开发步骤:
定义转换类继承类baseTypeHandler
覆盖4个未实现的方法
setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult
为查询时 mysql的字符串类型转换成java的Type类型的方法
) 在MyBatis核心配置文件中进行注册测试转换是否正确 案例:
需求:一个Java中的Date数据类型,我想将之存到数据库的时候存成个1970年至今的毫秒数,取出来时转换成java的Date,即ava的Date与数据库的varchar毫秒值之问转换。创建:
1.创建实现类并覆盖方法2.配置文件
//注意:Date有两个包,不要弄错,这里使用的是util.Date public class DateTypeHandler extends baseTypeHandler{ //将java类型转换成数据库需要的类型 @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException { //i: //date:要转换的date对象 long time = date.getTime();//获取date的时间毫秒值 preparedStatement.setLong(i,time); } //将数据库需要的类型转换成java类型 @Override public Date getNullableResult(ResultSet resultSet, String s) throws SQLException { //resultSet:查询到的结果集 //s:要转换的字段名称 //获取结果集需要的数据(bigint型)转换成long型,再转换成Date型,返回 long aLong = resultSet.getLong(s); Date date = new Date(aLong); return date; } @Override public Date getNullableResult(ResultSet resultSet, int i) throws SQLException { long aLong = resultSet.getLong(i); Date date = new Date(aLong); return date; } @Override public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException { long aLong = callableStatement.getLong(i); Date date = new Date(aLong); return date; } }
6. plugins标签
plugins标签
作用:对第三方插件进行引用,拓展功能例如:引入分页助手PageHelper插件进行分页
PageInfo相关参数
当前页 : pageInfo.getPageNum()每页显示条数 : pageInfo.getPageSize()总条数 :pageInfo.getTotal()其他见下面测试 步骤:
1)导入PageHelper坐标2)在核心配置文件配置PageHelper插件3)测试
- 导坐标
com.github.pagehelper pagehelper 5.1.2 com.github.jsqlparser jsqlparser 1.0
- 配置插件
- 测试
@Test
public void test1() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//设置分页相关参数 当前页+每页显示的条数
PageHelper.startPage(1,2);
//开始查询
UserMapper userMapper = (UserMapper) sqlSession.getMapper(UserMapper.class);
List users = (List) userMapper.findAll();
//分页打印
for(User user:users){
System.out.println(user);
}
//PageInfo相关参数
PageInfo pageInfo = new PageInfo(users);
System.out.println("当前页" + pageInfo.getPageNum());
System.out.println("每页显示条数" + pageInfo.getPageSize());
System.out.println("总条数" + pageInfo.getTotal());
System.out.println("总页数" + pageInfo.getPages());
System.out.println("上一页" + pageInfo.getPrePage());
System.out.println("下一页" + pageInfo.getNextPage());
System.out.println("是否是第一页" + pageInfo.isIsFirstPage());
System.out.println("是否是最后一页" + pageInfo.isIsLastPage());
sqlSession.close();
}
- 结果



