• MyBatis最原始的实现curd的操作


    关于jdbc的缺点:

    1.数据库链接创建释放频繁造成系统资源浪费从而影响系统性能。如果使用数据库连接池可以解决此问题。

    2.sql语句在代码中硬编码,不利于维护,sql变动需要改变java代码

    3.使用preparedStatement向占有位符号传参数存在硬编码,修改sql还要修改代码,系统不易维护

    4.对结果集解析存在硬编码(查询列名),修改sql还要修改代码,系统不易维护。

    (关于jdbc的具体操作,参见如下链接。)

    而上述jdbc的缺点,MyBatis都很好的解决了。

    MyBatis架构如下:

    mybatis是一个持久层框架, 作用是跟数据库交互完成增删改查

    mybaties是对jdbc的一个轻量级的封装,跟dbutils有一些像,不是orm框架,它是把sql语句放在xml文件里,然后去调用它。
    sqlsessionfactory用来加载xml里面一些全局的东西,然后再创建sqlsession会话,利用此会话可以调用sql语句,执行sql语句的时候。

    Mybaties内部会调用executor来执行。执行分为基本执行器和缓存执行器。

    mappedstatement把里面的东西转换为对象。

    先创建数据库,以下用user表做一个简单例子

    下面开始创建工程

    在这里我用的是myecplise.

    1.创建java工程

    2.jar包(分为核心包和依赖包)

    Mybaties里所有的包都不允许替换。版本必须是以下指定的版本。不然会出错。

    上面这个包是核心包,在github里可以下载。

    以下为所有的jar包。

     3.配置文件

    创建的sourceFolder,取名为config,

    sourceFolder的默认编译目录在MyBaties0606/bin

     在config下创建配置文件:log4j.properties    MyBaties默认使用log4j作为输出日志信息

    在config下创建SqlMapConfig.xml,在这里使用properties文件将数据库连接的一些信息保存下来了。

    SqlMapConfig.xml是myBatis的核心配置文件,上边配置的内容只是一部分,后面还会配置。

    在config下创建db.properties

    4.po类

    用在持久层,还可以再增加或者修改的时候,从页面直接传入action中,它里面的java bean 类名等于表名,
     属性名等于表的字段名,还有对应的get set方法。

    在这里使用user类。(咳咳,忽略我的包名是pojo)

    代码如下:

    5.sql映射文件

    在config目录下创建sql映射文件User.xml,以下为约束。

    6.加载sql映射文件。

    在SqlMapConfig,xml中,将User,xml添加进去。

    以上把基础的环境都配置好了,

    下面开始:MyBatis最原始的实现curd的操作

    1.首先是查询操作,根据id查询用户信息。

      在User.xml中定义:

    MyBatis的好处就是,将sql语句写在配置文件中,方便DBA优化sql语句。这一点上,由于hibernate封装的有点过,自动生成sql语句,导致sql语句没法优化。

    下面是测试代码:

    在这里用junit测试代码,输出结果如下:

    1.1  根据用户名查询用户信息

    同理,在user.xml中配置sql语句

    注意:这里使用的是拼接符${},而不是占位符#{}。

    拼接符和占位符的区别:、

    #{}占位符,起占位作用,如果传入的是(String,long,double,int,boolean,float)等基本类型,那么#{}里面可以随便写。

     #{}如果传入的是pojo类型,那么#{}中的变量名称必须 是pojo中对应的属性.属性.属性......

    ${}拼接符,字符串原样拼接,如果传入的参数是(String,long,double,int,boolean,float)等基本类型,那么${}里的值必须为value。但是注意:拼接符会有sql注入风险,需谨慎使用。

    sql语句中,like后面一般跟的是拼接符,但其实,Like后面也可以跟占位符,只是like后面跟占位符了以后,如果进行如上例子的查询%value%时,需要在传入的参数上面手动加%,这样不太利于参数的传递。

    测试程序:

    在上例中,由于查询的结果可能不只是一条,于是用selectList进行查询,返回值为list类型。user.xml中配置的返回值参数类型为返回值list类型的泛型。

    以下为运行结果:

     

     以上是查询操作,

     2.同理,插入操作也是一样的,现在user.xml中配置sql语句,然后再调用test方法进行插入。

    在这里,传入的参数是一个po类型的user对象,所以占位符#{}中的变量名称为po中对应的属性。

    测试代码:

    mybatis会自动开启事务,但不知道何时提交,所以需要手动提交,不提交事务也能运行成功,但是数据插不到数据库里面。

    运行结果:

    2.1  需要返回自增主键的插入操作

    (这里假设id为主键)

    数据库中存在一条语句:select LAST_INSERT_ID()  ,可以返回自增的主键

    于是我们只需要在正常的插入sql语句执行成功后,再执行一条返回自增主键的sql语句,就ok了。

    于是我们可以这样写:

    由于这里我的表结构设计的比较简陋,一共只有两个字段,当id变为主键时,插入语句只需要插入username的值就行。

    test代码保持不变。只是多了一个int类型的返回值。返回值即为主键。

     

    由于我这里的表结构没有主键,这里只是简单演示一下怎么做,没有运行结果。

     3.删除操作

    同理,配置删除的sql语句:

    parameterType里可以传入完整的类名,也可以传入别名。

    由于占位符中传入的是基本数据类型,这里的#{}里面可以随便写,为了规范起见,这里我写的是id。

    下面为测试代码,同理,这个也需要提交

    运行结果:

    4.更新操作

    同理~~懒得解释

    测试代码~~然后~~记得提交~~

    emmm,以上为最原始的myBaris的curd操作,重复的代码比较多,也比较麻烦。

    稍微用拼凑的截图总结一下上述内容。(*^__^*) ……

    MyBatis中还有两种方式,原始Dao开发方法和Mapper接口开发方法。详情见我的下一篇博客~~

  • 相关阅读:
    我罗斯方块
    《程序设计语言综合设计》第四周上机练习——5 好吃的巧克力
    《程序设计语言综合设计》第四周上机练习——4 特殊的翻译
    《程序设计语言综合设计》第四周上机练习——3 开机方案
    《程序设计语言综合设计》第三周上机练习——3 不诚实的卖家
    《高级语言程序设计实践》期末考试复现——9 丢手绢
    《高级语言程序设计实践》期末考试复现——7 芽衣的厨房
    《高级语言程序设计实践》期末考试复现——5 圣诞老人的糖果
    《高级语言程序设计实践》期末考试复现——4 希儿的日记本
    FZU_DS_2019_SequenceList
  • 原文地址:https://www.cnblogs.com/tonbby/p/9148030.html
Copyright © 2020-2023  润新知