mybatis

 

 

#{}表示一个占位符,通过ognl来读取属性值
${}表示一个拼接号,将接受到的参数的内容不加任何修饰拼接到sql中。会引用sql注入,所以不建议使用
selectOne表示查询出一条记录进行映射,如果使用selectOne可以实现,那么使用selectList也可以实现(list中只有一个对象)
selectList表示查询一个列表记录

select * from user where user like `%${value}%`

 insert into user(id, userName, password) values(#{id}, #{userName}, #{password})
id是自增的 可以不写
    <insert id="addUser" parameterType="com.hust.model.User">
        <!-- 只适用自增的主键 -->
        <selectKey  keyProperty="id" order="AFTER"  resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into user(userName, password) values(#{userName}, #{password})
        <!--insert into user(id, userName, password) values(#{id}, #{userName}, #{password})-->
    </insert>

uuid
    <insert id="addUser" parameterType="com.hust.model.User">
        <!-- 适用非自增的主键 -->
        <selectKey  keyProperty="id" order="BEFORE"  resultType="java.lang.String">
            SELECT uuid()
        </selectKey>
        insert into user(id, userName, password) values(#{id}, #{userName}, #{password})
    </insert>


hibearnate:是一个标准的ORM(对象关系映射)框架。入门门槛高,不需要写sql,sql自动生成。
对sql语句进行优化、修改比较困难。
应用场景:适用需求变化不多的中小型项目。

mybatis:专注sql本身,需要程序员自己编写sql语句。sql修改,优化比较方便。它是一个不完全的ORM框架。
mybatis也可以实现映射(输入输出映射)
适用于需求变化较多的项目,比如互联网项目。



mapper代理方法
编写mapper接口(相当于dao接口),需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象
编写mapper.xml映射文件

开发规范
1、mapper.xml
namespace 命名空间,作用就是对sql进行分类管理,理解sql隔离
2、mapper.java接口中的方法名和mapper.xml中的statement的id一致
3、mapper.java接口中的方法参数类型、返回类型和mapper.xml中的statement的perameterType、resultType一致。

mapper接口方法的参数只能有一个,如果需要多个参数,则需要封装成一个对象来作为参数
即可以使用包装类型的pojo满足不同的业务方法的需求,但service中建议不要使用包装类型

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans

mybatis默认支持的别名
int  long  bigDecimal等基本的数据类型
    <typeAliases>
        <!-- 单个别名定义 -->
        <typeAlias alias="User" type="com.hust.model.User" />
        <!-- 批量定义别名,自动定义别名,别名就是类名(首字母大写或小写都可以,通常小写) -->
        <package name="com.hust.model"/>
        <package name="com.hust.model"/>
    </typeAliases>


typeHandlers类型处理器
通常mybatis提供的类型处理器能满足日常需求


<configuration>
    <typeAliases>
        <!-- 单个别名定义 -->
        <typeAlias alias="User" type="com.hust.model.User" />
        <!-- 批量定义别名,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
        <package name="com.hust.model"/>
        <package name="com.hust.model"/>
    </typeAliases>
    
    <mappers>        
        <!-- 通过resource方法一次加载一个映射文件 -->
        <mapper resource="com/hust/mapping/UserMapper.xml" />
        
        <!-- 通过mapper接口加载映射文件 -->
        <!-- 必须遵守一些规范:mapper接口类名和mapper.xml映射文件名一致,且在同一个目录中 -->
        <!-- com.hust.dao.UserMapper.xml com.hust.dao.UserMapper.java  -->
        <mapper class="com.hust.dao.UserMapper"/>
        
        <!-- 批量加载mapper 指定mapper接口的包名,自动扫描包下所有mapper。-->
        <!-- 同样必须遵守 mapper接口类名和mapper.xml映射文件名一致,且在同一个目录中 -->
        <package name="com.hust.dao"/>
    </mappers>
</configuration>

 

posted @ 2018-04-26 11:29  牧 天  阅读(167)  评论(0编辑  收藏  举报