mybatis的xml开发

mybatis的xml开发,第1张

mybatis的xml开发 2.Mybatis的快速入门 2.1 MyBatis开发步骤

MyBatis官网地址:http://www.mybatis.org/mybatis-3/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RwUVp7BW-1640703555711)(img图片3.png)]

MyBatis开发步骤:

①添加MyBatis的坐标

②创建user数据表

③编写User实体类

④编写映射文件UserMapper.xml

⑤编写核心文件SqlMapConfig.xml

⑥编写测试类

2.2 环境搭建

1)导入MyBatis的坐标和其他相关坐标


    org.mybatis
    mybatis
    3.4.5


    
    mysql   
    mysql-connector-java    
    5.1.6    
    runtime


    
    junit    
    junit    
    4.12    
    test


    
    log4j    
    log4j    
    1.2.12

  1. 创建user数据表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JrLbVAsK-1640703555713)(img图片5.png)]

  1. 编写User实体
public class User {    
	private int id;    
	private String username;    
	private String password;
    //省略get个set方法
}

4)编写UserMapper映射文件



    
	        
		select * from User    
	

  1. 编写MyBatis核心文件

    
	        
		            
			            
			                
				
				                
				
				            
			        
		    
	    
	
	 
		 
	


2.3 编写测试代码
//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new            
                           SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
List userList = sqlSession.selectList("userMapper.findAll");
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();
2.4 知识小结

MyBatis开发步骤:

①添加MyBatis的坐标

②创建user数据表

③编写User实体类

④编写映射文件UserMapper.xml

⑤编写核心文件SqlMapConfig.xml

⑥编写测试类

3. MyBatis的映射文件概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZLjXdJRy-1640703555713)(img图片6.png)]

4. MyBatis的增删改查 *** 作 4.1 MyBatis的插入数据 *** 作

1)编写UserMapper映射文件

    
	        
		insert into user values(#{id},#{username},#{password})    
	

2)编写插入实体User的代码

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new 
                        SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int insert = sqlSession.insert("userMapper.add", user);
System.out.println(insert);
//提交事务
sqlSession.commit();
sqlSession.close();

3)插入 *** 作注意问题

• 插入语句使用insert标签

• 在映射文件中使用parameterType属性指定要插入的数据类型

•Sql语句中使用#{实体属性名}方式引用实体中的属性值

•插入 *** 作使用的API是sqlSession.insert(“命名空间.id”,实体对象);

•插入 *** 作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()

4.2 MyBatis的修改数据 *** 作

1)编写UserMapper映射文件


    
        update user set username=#{username},password=#{password} where id=#{id}
    


2)编写修改实体User的代码

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int update = sqlSession.update("userMapper.update", user);
System.out.println(update);
sqlSession.commit();
sqlSession.close();

3)修改 *** 作注意问题

• 修改语句使用update标签

• 修改 *** 作使用的API是sqlSession.update(“命名空间.id”,实体对象);

4.3 MyBatis的删除数据 *** 作

1)编写UserMapper映射文件


    
        delete from user where id=#{id}
    


2)编写删除数据的代码

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int delete = sqlSession.delete("userMapper.delete",3);
System.out.println(delete);
sqlSession.commit();
sqlSession.close();

3)删除 *** 作注意问题

• 删除语句使用delete标签

•Sql语句中使用#{任意字符串}方式引用传递的单个参数

•删除 *** 作使用的API是sqlSession.delete(“命名空间.id”,Object);

4.4 知识小结
增删改查映射配置与API:
查询数据: List userList = sqlSession.selectList("userMapper.findAll");
    
    select * from User
    
        
            and id=#{id}
        
        
            and username=#{username}
        
    


当查询条件id和username都存在时,控制台打印的sql语句如下:

     … … …
     //获得MyBatis框架生成的UserMapper接口的实现类
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User condition = new User();
    condition.setId(1);
    condition.setUsername("lucy");
    User user = userMapper.findByCondition(condition);
    … … …

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5K1Y1VaJ-1640703596529)(img图片3.png)]

当查询条件只有id存在时,控制台打印的sql语句如下:

 … … …
 //获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User condition = new User();
condition.setId(1);
User user = userMapper.findByCondition(condition);
… … …

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ir2v9mqD-1640703596529)(img图片4.png)]

2.1.3 动态 SQL 之

循环执行sql的拼接 *** 作,例如:SELECT * FROM USER WHERe id IN (1,2,5)。


   select * from User
   
       
           #{id}
       
   

测试代码片段如下:

 … … …
 //获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int[] ids = new int[]{2,5};
List userList = userMapper.findByIds(ids);
System.out.println(userList);
… … …

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mHCy8I4X-1640703596529)(img图片5.png)]

foreach标签的属性含义如下:

标签用于遍历集合,它的属性:

•collection:代表要遍历的集合元素,注意编写时不要写#{}

•open:代表语句的开始部分

•close:代表结束部分

•item:代表遍历集合的每个元素,生成的变量名

•sperator:代表分隔符

2.2 SQL片段抽取

Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的




2.3 知识小结

MyBatis映射文件配置:

:查询

:插入

:修改

:删除

:where条件

:if判断

:循环

:sql片段抽取

3. MyBatis核心配置文件深入 3.1typeHandlers标签

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器(截取部分)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZiiBi9t6-1640703596530)(img图片6.png)]

你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.baseTypeHandler, 然后可以选择性地将它映射到一个JDBC类型。例如需求:一个Java中的Date数据类型,我想将之存到数据库的时候存成一个1970年至今的毫秒数,取出来时转换成java的Date,即java的Date与数据库的varchar毫秒值之间转换。

开发步骤:

①定义转换类继承类baseTypeHandler

②覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时 mysql的字符串类型转换成 java的Type类型的方法

③在MyBatis核心配置文件中进行注册

测试转换是否正确

public class MyDateTypeHandler extends baseTypeHandler {
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType type) {
        preparedStatement.setString(i,date.getTime()+"");
    }
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return new Date(resultSet.getLong(s));
    }
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return new Date(resultSet.getLong(i));
    }
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return callableStatement.getDate(i);
    }
}
  
  




测试添加 *** 作:

user.setBirthday(new Date());userMapper.add2(user);

数据库数据:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qnSk3uvY-1640703596530)(img图片7.png)]

测试查询 *** 作:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-49Xiz3q5-1640703596530)(img图片8.png)]

3.2 plugins标签

MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂 *** 作进行封装,使用简单的方式即可获得分页的相关数据

开发步骤:

①导入通用PageHelper的坐标

②在mybatis核心配置文件中配置PageHelper插件

③测试分页数据获取

①导入通用PageHelper坐标
    
	com.github.pagehelper
    pagehelper    
    3.7.5

    
	com.github.jsqlparser
	jsqlparser    
	0.9.1

②在mybatis核心配置文件中配置PageHelper插件
    
    


③测试分页代码实现
@Testpublic void testPageHelper(){    
//设置分页参数    PageHelper.startPage(1,2);   
 List select = userMapper2.select(null);    
 for(User user : select){        
 	System.out.println(user);    
 	}}

获得分页相关的其他参数

//其他分页的数据PageInfo pageInfo = new PageInfo(select);System.out.println("总条
数:"+pageInfo.getTotal());System.out.println("总页
数:"+pageInfo.getPages());System.out.println("当前
页:"+pageInfo.getPageNum());System.out.println("每页显示长
度:"+pageInfo.getPageSize());System.out.println("是否第一
页:"+pageInfo.isIsFirstPage());System.out.println("是否最后一
页:"+pageInfo.isIsLastPage());
3.3 知识小结

MyBatis核心配置文件常用标签:

1、properties标签:该标签可以加载外部的properties文件

2、typeAliases标签:设置类型别名

3、environments标签:数据源环境配置标签

4、typeHandlers标签:配置自定义类型处理器

5、plugins标签:配置MyBatis的插件

"

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5683099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存