• Mybatis-02


    一、

    1、使用Map作为参数类型

    当实体类或数据库表中的字段或参数过多时,如果要向表中插入添加或其他操作时使用实体类对象会比较繁琐,因为对象的参数太多。先理解这样一个设计方式,不正规但实用。

     //向角色表中新增一个角色名--接口
    int addUser2(Map<String,Object> map);
    <!--Mapper.xml-->
    <insert id="addUser2" parameterType="map">
            insert into smbms_role (id,roleName) values (#{roleId},#{roleName})
    </insert>
    //测试    
    @Test
        public void addUser2() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("roleId",1);
            map.put("roleName","仓库管理");
            mapper.addUser2(map);
            sqlSession.close();
    }

    Map传递参数,直接在sql中取出key即可。  parameterType = "map"

    对象传递参数,直接在sql中取出对象属性即可。   parameterType = "Object"

    只有一个基本类型参数的情况下,可以直接在sql中取到。不写参数类型也可以

    多个参数用Map,或者注解。

    注意:当前配置文件中 parameterType 参数类型是map    sql语句中的参数要和map中的key对应

    2、模糊查询怎么写

    在Java代码执行的时候,传递通配符%%

    List<User> user2 = mapper.getUser2("%li%");

    在sql拼接中使用通配符  防止sql注入

    select * from user where name like "%"#{name}"%"

    3、环境配置

    Mybatiis可以配置成适应多种环境

    不过要记住:尽管可以配置多个环境,但每个sqlsessionFactory实例只能选择一种环境

    Mybatis默认的事务管理器是JDBC,连接池:POOLED

    还有一个事务管理器,现在已经不用了,但是面试问有几个事务管理器要知道有两个,另一个叫Managed

     4、优化配置文件

    driver=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:8080/mybatis?serverTimezone=UTC&amp;userSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8
    username=root
    password=123456
    <!--如果外部文件包含所有配置那就这样直接引入就行了--> 
    <properties resource="db.properties"/>
    <!--如果外部文件没有包含所有配置--> 
    <properties resource="db.properties">
            <property name="username" value="lcz"/>
            <property name="password" value="123456"/>
    </properties>

    可以引入外部文件  用<properties>标签代表外部配置文件

    可以在其中增加一些属性配置

    如果两个配置文件中有同一个字段,优先使用外部配置文件的

    5、类型别名

    类型别名是为Java类型设置一个短的名字

    存在的意义仅在于用来减少类完全限定名的冗余

    两种起别名的方式:

    1、指定类的全路径,设置一个别名

    2、也可以指定一个报名,mybatis会在报名下面自动搜索需要的JavaBean,扫面实体类的包,他的默认别名就是这个类的类名,首字母小写。

    <typeAliases>
            <typeAlias type="space.urbeautiful.pojo.User" alias="User"/>
    </typeAliases>
    <typeAliases>
            <package name="space.urbeautiful.pojo"/>
    </typeAliases>
    <select id="getUser" resultType="User">
           select * from mybatis.user
    </select>

    在实体类比较少的时候使用第一种方式

    如果实体类十分多,建议使用第二种

    第一种方式可以自定义别名,第二种只能是类的名称(小写大写都可以,但是官方建议使用小写),但是当实体类有注解的话,那么就在实体类上写注解名

    @Alias("uuussseeerrr")
    public class User {}

    6、映射器

    MapperRegistry:注册绑定我们的Mapper文件

    方式一:推荐使用这样注册mapper

    <!--为每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
    <mappers>
            <mapper resource="space/urbeautiful/dao/UserMapper.xml"/>
    </mappers>

    方式二:使用class文件绑定注册

        <!--为每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
        <mappers>
            <mapper class="space.urbeautiful.dao.UserMapper"/>
        </mappers>

    接口和他的Mapper配置文件必须同名

    接口和他的Mapper配置文件必须在同一个包下,不然就会报错  未知注册

    方式三:使用扫描包进行注入绑定

       <!--为每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
        <mappers>
            <package name="space.urbeautiful.dao"/> 
        </mappers>

    注意点和方式二一样,都需要同名同包

    二、声明周期和作用域

     生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题。

    SqlSessionFactoryBuilder:

    一旦创建了SqlSessionFactory就不需要它了。   作用域放在局部变量中。

    SqlSeesionFactory:

    说白了就是可以想象为:数据库连接池

    SqlSeesionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。浪费资源

    SqlSession:

    连接到连接池的一个请求

    SqlSessioon的实例不是线程安全的,因此不能被共享,所以他的最佳作用域是请求或方法的作用域。

    用完之后需要赶紧关闭,否则资源被占用

     三、resultMap

     resultMap元素是Mybatis中最重要的元素

    resultMap的设计思想是,对于简单的语句根本不需要配置显示的结果映射,而对于复杂一点的语句只需要描述他们的关系就行了

    四、日志工厂

    1、默认的日志工厂STDOUT_LOGGING

     利用日志工厂后的控制台输出

  • 相关阅读:
    利用SCI做的一个足球答题系统
    《Play for Java》学习笔记(四)Controller
    《Learning Play! Framework 2》学习笔记——案例研究1(Templating System)
    《Play for Java》学习笔记(三)template+Message
    CSS垂直居中对齐
    Metro UI(Win 8风格)页面设计小记
    Play Framework介绍:主要概念(转)
    《Play for Java》学习笔记(二)基本的CRUD应用
    《Play for Java》学习笔记(一)项目框架
    复杂产品的响应式设计【流程篇】 (转)
  • 原文地址:https://www.cnblogs.com/jzspace/p/13174677.html
Copyright © 2020-2023  润新知