Mybatis介绍

                   Mybatis是一个应用于dao层框架(持久化框架),他也是一个orm(对象、关系、映射)框架,

相当于一个半自动的

            

                 优点:

                      那么既然是dao层框架那就先说说jdbc的缺点吧:

                       重复工作比较多:每次都要创建连接(连接池)  获得执行的sql语句  然后处理结果集 

                      最后释放资源

                       处理结果集,工作复杂

                        参数处理比较麻烦

                   那既然说完了jdbc的缺点:那就说说Mybatis有什么优点吧

                                让程序员只关注sql

                                  参数的设置,结果集的处理 框架自动帮你生成

                               简单易学

                               灵活

     

Mybatis入门

   

1. 导入Mybatis

2. 准备实体类

3. 数据库驱动包

4. 书写配置文件

 核心配置文件  

1)sqlMapConfig.xml (命名可以修改,位置任意 当然名字建议叫做sqlMapConfig 位置放在src目录下)  导入约束文件

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis1"></property>
                <property name="username" value="root"></property>
                <property name="password" value="123"></property>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="pojo/UserMapper.xml"></mapper>
    </mappers>
</configuration>

 

   映射文件(userMapper.xml名字可以修改 位置任意 名字建议user.xml(ibatis)            UserMapper.xml(Mybatis) 建议命名为  类名+Mybatis.xml

书写sql语句

 Mapper namespace属性:解决在不同表中查询的sql语句的名字冲突比如: user findById       ordersfindById       

      名字冲突 不识别,所以可以给不同的表的数据源加上一个前缀 对应的是namespace属性

 <?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">
<mapper namespace="test">
    <select id="findUserById" parameterType="int" resultType="pojo.User" >
        SELECT * FROM t_user WHERE id =  #{id}
    </select>

    <select id="findUserByName" parameterType="String" resultType="pojo.User">
        SELECT * FROM t_user WHERE username LIKE "%"#{username}"%"
    </select>
    <insert id="addUser" parameterType="pojo.User">
            <!--
            keyProperty:将查询到主键设置到parameterType指定的对象的哪个属性
            order:SELECT LAST_INSERT_ID()的执行顺序,相对于insert语句来说他的执行顺序。
        -->
            <selectKey keyProperty="id" resultType="Integer" order="AFTER" >
                SELECT LAST_INSERT_ID()
            </selectKey>
         INSERT INTO t_user(username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})
    </insert>

    <delete id="deleteUser" parameterType="Integer" >
        DELETE  FROM user WHERE id = #{id}
    </delete>

    <update id="updateUser" parameterType="pojo.User">
        UPDATE t_user SET username = #{username} WHERE id = #{id}
    </update>

</mapper>



Id 给当前 sql语句起一个识别id

parameterType  参数类型

resultType:  结果集封装的类型

#{id} 占位符(里面的名字任意  不能不写)

简单使用Mybatis增删改查

$字符串拼接(sql注入(不建议使用这样)) 也使用占位符1.直接将整个当成参数在代码中传递时手动拼接

#占位符

 

$ #区别:

 #里面的变量名随意   ${变量名} 不能随便写 如果是常用类型 必须value

 

 

如果是增删改 必须要提交事务,持久化到数据库

通过id查找一个用户

<select id="findUserById" parameterType="int" resultType="pojo.User" >
    SELECT * FROM t_user WHERE id =  #{id}
</select>

测试代码

User user = sqlSession.selectOne("test.findUserById", 2);

 

通过名字模糊查找用户

<select id="findByName" parameterType="String" resultType="pojo.User">
         SELECT * FROM  t_user WHERE name LIKE "%"#{name}"%"

</select>

测试代码:

List<Object> list = sqlSession.selectList("test.findByName", "李");

 

添加一个用户

 

<!--如果参数是引用类型 占位符的赋值方式为ongl表达式的方式{属性名}-->
        <insert id="addUser" parameterType="pojo.User">
             INSERT  INTO t_user(name,sex,address,balance) VALUE (#{name},#{sex},#{address},#{balance})
        </insert>

 

int insert = sqlSession.insert("test.addUser", user);

 

 

 

这种操作并不会把新生成的记录中的主键保存到对象中,但是有一种需求,在保存用户的同时,要利用用户主键去保存一个新的记录。为了满足需求  提供了新的标签

 KeyProperty:对应的是对象的属性名keyCloeumn对应的是数据库中的字段名

ResultType:对应的是返回结果的类型(int  String)分别对应数据库生成代理主键的策略  int 对应 自动递增 String uuid

 Order:顺序 跟数据底层有关,自动递增默认先添加数据在生成主键。但是uuid就是生成Id 在去添加数据

<insert id="addUser" parameterType="pojo.User">
    <selectKey keyColumn="id"  keyProperty="id"  resultType="int" order="AFTER">
            SELECT  LAST_INSERT_ID()
    </selectKey>
     INSERT  INTO t_user(name,sex,address,balance) VALUE (#{name},#{sex},#{address},#{balance})
</insert>

 

查询语法:SELECT  LAST_INSERT_ID() 适用于自动递增

SELECT uuid()适用于uuid

通过id删除一个用户

 

 

 

通过id修改一个用户

 

原始dao层开发

Daomapper开发

不用去写实现类,他会代理方式自动生成实现代码。想要使用mapper开发必须遵循以下原则:

1. 接口名字建议和mapper映射文件名字保持一致并且在同一目录下 namespace必须和接口的完整路径名保持一致

 

2. 接口中的方法名必须和mapper中的id保持一致

 

3. 方法返回值要和配置中的resultType保持一致

4. 参数的类型必须保持一致

在代码中就不需要关注sqlsession对象的方法调用了insert update   delete  selectOne   selectList

返回一个接口的代理对象,直接调用该方法的方法即可

 

注意:

 使用mapper开发,它的参数永远只有一个(解决问题的方法,将多余的参数封装成pojo类)

 

 Mybatis自动识别接口中的方法的返回值,从而调用session.selectOneselectList方法

 

 

SqlMapConfig配置详解

• properties   设置配置信息

• settings 1    全局设置  mybatis 二级缓存 设置mybatis的加载属性

 • typeAliases   别名

<!--单个别名-->
<typeAlias type="pojo.User" alias="user"></typeAlias>
<!--多个别名 别名不区分大小写   -->
<package name="pojo"></package>

决定着mapper.xml文件中数据类型可以直接使用简短的名字

 • typeHandlers

       类型控制器,将数据库中的数据类型和java中的数据类型进行匹配。一般情况下不用书写

 • objectFactory 1

 • plugins 1

• environments

 • environment

• transactionManager

• dataSource

• databaseIdProvider

 • mappers

  映射文件书写方式:

1。

<mapper resource="sqlMapCnfig/UserMapper.xml"></mapper>

2. 通过接口读取配置:

   接口的名字必须和配置文件保持一致

3. Url  通过绝对路径来读取

4. 扫描包

 

读取的时候接口的包名,因此要求所有的接口和对应的配置文件都要保持一致(名字和位置)

 

  总结:4种 你的接口和配置文件同名且在同一包下

各位大姐姐大哥哥  看看有什么错误没  有


的话提出来一下。需要案例的可以发给你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值