MyBatis(二)

摘要:
API:Resources:将核心配置文件加载到流中;SqlsessionFactoryBuilsder:用于构造SqlsessionFactorySqlSessionFactory:构建SqlSeeion对象接口代理方法实现对Dao层的开发1.映射文件和dao层下的接口名一致编译后在同一个文件夹中2.映射文件的namespace的名字与接口全限定名一致3.接口定义的方法名参数类型返回值类型与xm

API:

Resources:将核心配置文件加载到流中;

SqlsessionFactoryBuilsder:用于构造SqlsessionFactory

SqlSessionFactory:构建SqlSeeion对象

接口代理方法实现对Dao层的开发

1.映射文件和dao层下的接口名一致 编译后在同一个文件夹中

2.映射文件的namespace的名字与接口全限定名一致

3.接口定义的方法名参数类型返回值类型与xml中定义的一致

Mapper mapper =SqlSeesion.getMapper();
mapper.select()

ResultMap:可以解决数据库的属性和实体类对应不上的问题。

MyBatis(二)第1张

子标签中id时表中的主键id 其他列都是用result column----property

Mybatis中多参数传递:

1.索引 where uid = #{0}----0占位符 低版本多参数uid=#{arg0} and uname=#{arg1}

2.map集合:uid=#{key1} and uname=#{key2} key1.key2对应map中键

3.注解:( @param(value=" 11 ") String uname) uname=#{11} sql语句{}中的值必 须与注解中的value值一样

4.属性名 传入对象 uid=#{属性名} and uname=#{属性名}

      //顺序传值
           select * from user where uid = #{0} and uname =#{1}
        //通过注解 注解设置的value值与sql相对应
          select(@parm(value ="uid") int uid ,@parm(value ="uname") String uname )
        select * from user where uid =#{uid} and uname=#{uname}
        //通过map集合  
            Map map = newHashMap();
        map.put("key1",1)
        map.put("key2","李四")
        select * from user where uid={key1} and uname={key2} 
        //通过对象
           User user =newUser();
        User.setId(1)
        User,setName("李四")
        select * from user where uid={uid} and uname={uname} 

模糊查询:

占位符: 1. select * from user where uname like #{uname}

测试selectByLike("%"+"王"+"%")

2.select * from user where uname like '%${value}%'(适用范围mysql sqlserver)

测试selectByLike("王") 不使用value接口顶顶方法时需要使用注解方式传值

3.select * from user where uname like concat(’%‘,#{uname},’%‘)

字符串拼接:4."%"#{uname}"%" 会有sql注入问题

${}和#{}的区别:

#{}表示的是占位符, 相对安全 里面的名字随意

可以实现preparedStatement向占位符赋值 自动进行java类型转换和jdbc类型转换 可以防止sql注入

可以接收简单类型或pojo类型 如果paramenterType传递单个简单类型{}里可以实value或者其他名称

${}表示的是拼接sql串, 变量名不能随意给 否则必须给注解

Mybatis中主键的使用:

MyBatis(二)第2张

sql片段:

对公共的sql代码进行抽取

MyBatis(二)第3张

分页:

使用插件进行分页开发

引入jar包:

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.3</version>
</dependency>

核心xml文件引入插件:

<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

编写代码:

//设置当前页和页量

PageHelper.startPage(3,3);

//实例化PageInfo对象传入数据库中的所有的数据集合

List<User>  users =userMapper.selectAll();
PageInfo<User> pageInfo =new PageInfo<>(users);

//通过get方法可以获取分页相关的属性值

System.out.println(pageInfo.getPageNum());
        System.out.println(pageInfo.getPages());
        System.out.println(pageInfo.getSize());
        System.out.println(pageInfo.getTotal());
        System.out.println(pageInfo.isIsFirstPage());
        System.out.println(pageInfo.isIsLastPage());
        System.out.println(pageInfo.getList());

表与表之间的关系一对一:一对多:

多对多:
嵌套查询:
把一对一 或者一对多的查询语句 分成两个语句来分别查询
1.一对一:
<trim>标签
<trim prefix="前缀" suffixOverrides="去除后缀">
</trim>

<foreach ></foreach>遍历
1.遍历集合
collection:遍历的对象 list array
open:开始
item:每次遍历的数据
close:以..结束
separtor:以..分割
close:以..结束
使用注解进行开发:

免责声明:文章转载自《MyBatis(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]C#中用NamedPipe进程间通信使用git pull文件时和本地文件冲突怎么办?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MyBatis中的mapper中的&amp;lt;sql/&amp;gt;标签介绍

mapper中的标签的详细定义如图: insert、update、delete、select这四个标签在mybatis操作与配置文件中以说到,这里就不说了。 1、sql标签: sql标签是mapper节点的标签。 sql标签的属性:  id属性  databaseId属性  lang属性sql标签的子标签:   include、trim、where、se...

使用mybatis出现异常:invalid comparison: java.time.LocalDateTime and java.lang.String

整了半天终于找到问题所在:在mapper文件中,对该参数进行了和字符串的对比,如下: <if test="startTime != null and startTime != '' and endTime != null and endTime != ''"> AND createTime BETWEEN #{startTime} A...

SQL group by 分组后,同一组的排序后取第一条

SELECT * FROM(                SELECT                     [SPID]                    ,[PH1]                    ,[PH1_Code]                    ,[ProjectName]                     ,ROW...

MyBatis的Example如何按条件排序(Day_35)

MyBatis的Example如何按条件进行排序? 背景:有时我们在使用mybatis example 进行查询时,需要进行相应的业务排序。本博客以下图为例 @Override public List<Paper> viewPaperAll() { PaperExample paperExample = new...

Oracle数据库LOGGING&amp;amp;NOLOGGING模式概述

1.日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING) 1.1三者的含义 LOGGING:当创建一个数据库对象时将记录日志信息到联机重做日志文件。LOGGING实际上是对象的一个属性,用来表示在创建对象时是否记录REDO日志,包括在做DML时是否记录REDO日志。一般表上不建议使用NOLOGGING,在创建索引或做大量数据...

oracle分组后取某组中最大的值

查询username,根据fundcode分组,按照date倒序,取date最大的一条数据 select * from ( select username, row_number() over(partition by fundcode, order by date desc) rn from usertable ) t where t.rn <...