zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    Linux常用软件 分类: arm-linux-Ubuntu 2013-07-22 16:28 301人阅读 评论(0) 收藏
    Linux系统信息查看命令大全 分类: arm-linux-Ubuntu 2013-07-22 16:28 302人阅读 评论(0) 收藏
    解决VC6下调不出MSDN的问题! 分类: VC++ 2013-07-22 16:28 297人阅读 评论(0) 收藏
    Shell编程基础 分类: arm-linux-Ubuntu 2013-07-22 16:28 189人阅读 评论(0) 收藏
    linux内核体系结构 分类: arm-linux-Ubuntu 2013-07-22 16:28 359人阅读 评论(0) 收藏
    Linux分区和挂载(mount命令的学习) 分类: arm-linux-Ubuntu 2013-07-22 16:28 265人阅读 评论(0) 收藏
    重新编译Linux内核必要性及其准备工作 分类: arm-linux-Ubuntu 2013-07-22 16:28 288人阅读 评论(0) 收藏
    ubuntu11.04启动 及虚拟文件系统 分类: arm-linux-Ubuntu 2013-07-22 16:28 369人阅读 评论(0) 收藏
    VxWorks 任务 分类: vxWorks 2013-07-22 16:28 646人阅读 评论(0) 收藏
    vxWorks 命令 分类: vxWorks 2013-07-22 16:28 544人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/jzspace/p/13174677.html
Copyright © 2011-2022 走看看