简单的mybatis应用

关于mybatis
持久层的框架 简单来说就是dao层和数据库进行打交道

在未学习这个框架我们使用的是原生的JDBC技术来和数据库打交道
原生的JDBC和数据库打交道的步骤就是
1.加载数据库驱动
2.建立连接 获取connection对象
3.创建可以执行sql语句的PreparedStatement对象
PreparedStatement对象,可以有效的防止sql的注入问题,sql语句在程序运行前已经进行了预编译,运行时动态的把参数传递给preparedstatment时 即使参数里有敏感字符数据库会作为一个参数一个字段的属性值来处理而不会发生注入 满足条件就会执行这个sql语句
4.处理执行的结果 resultset结果集
5.释放资源 建立的连接都要进行关闭
使用mybatis框架就是用来解决JDBC中的缺陷问题
1.Sql语句出现在代码中,如果更换数据库或连接池 sql语句不易维护,所以当sql语句发生变化时,我们写的代码不会受到影响这是我们的目的
2.对于使用preparedstatement对象向占位符传递参数时,sql语句中where条件不一定,如果发生改变时就需要去修改代码,不易维护程序
3.对结果集的解析,将查询到数据库中的数据进行封装到javaBean对象中会更方便

所以对于mybatis框架 将sql语句和java代码进行分离,将sql语句写到xml的配置文件中,通过数据表中的记录和对象之间的映射关系,将数据库中的数据提取出来
sql注入问题

//Statement  
String id = "5";
String sql = "delete from table where id=" +  id;
Statement st = conn.createStatement();  
st.executeQuery(sql);  
//存在sql注入的危险
//如果用户传入的id为“5 or 1=1”,那么将删除表中的所有记录
delete from table where id= 5 or 1 = 1;
//PreparedStatement 有效的防止sql注入(SQL语句在程序运行前已经进行了预编译,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令)
String sql = “insert into user (name,pwd) values(?,?);  
PreparedStatement ps = conn.preparedStatement(sql);  
ps.setString(1, “col_value”);  //占位符顺序从1开始
ps.setString(2,123456); //也可以使用setObject
ps.executeQuery();

Mybatis的工作原理
1.读取配置它的文件mybatis-config.xml,当然这个配置文件名字可以进行修改(自定义)
配置文件中配置了数据源、事务和mybayis的运行环境
2.加载数据库表和javaBean之间映射的配置文件,该配置文件是sql映射文件,需要在mybatis-config.xml加载
3.创建会话工厂SqlSessionFactory
4.通过会话工厂创建 sqlSession会话对象,通过会话对象opensession()方法打开一个会话
5.通过会话对象执行sql语句,获取返回值,会话对象是和Executor接口绑在一起,每个sqlsession对象都拥有一个Executor对象,这个接口就是一个执行器
6.输入参数和输出结果的映射,也就是参数和返回值
在执行sql语句之前,执行器通过MappedStatement对象,将传入的java对象映射到sql语句中,执行sql语句之后,在通过mappedStatement对象将执行的结果映射到java对象

Mybatis 的简单应用
1.通过maven搭建一个java项目,在maven的pom.xml配置文件中进行依赖配置
先引入核心的mybatis的jar 包,然后引入数据库连接的jar包,在引入log4j.jar包用来查看控制台输出的sql语句
2.编写mybatis-config.xml的全局的配置文件
3.写一个实体类和数据录中的字段进行映射
4.编写映射文件,通过标签写sql语句 mapper标签的namespace属性命名空间,作用就是对mapper进行分类管理,也相当于不能出现重复的命名。这个就是如果你的两个mapper配置文件的的命名空间相同,里边的两个sql语句的id也相同这时就需要加上命名空间用来进行区分看是调用哪个mapper中的sql语句。
Mapper中的resultType属性,如果是一个自定义的实体类就要写上全类名,parameteType也是如此
5.编写测试程序,通过会话对象调用对应的方法将配置文件中的标签的id属性值传递进去执行sql语句,返回结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sclience_kang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值