mybatis相关使用_lombok插件
Day52
mybatis高级
mybatis核心文件配置信息
1,加入properties文件
在resource中创建dbinfo.properties文件,包含数据库连接信息
<properties resource = "dbinfo.properties"/> 注: 在数据源的值里面使用${properties的键值名} <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
2,setings设置
日志
<!--log4j(SSM)/slf4j(springboot)STDOUT_LOGGING-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
3,typeAliases
别名
别名1:
第一种:给类定义别名,别名自行定义 <typeAlias type="com.jlf.entity.User" alias="u"/>
别名2:
第二种:引入包名,此时别名默认为类的首字母小写方式 <package name="com.jlf.entity"/>,例:com.qf.entity.User-->user
别名3:
第三种:java内建类型的别名,查表 ---mybatis; 例:java.util.Map;-->map
参数传递方式
参数的使用语法:#{参数名}
1,序号传参
序号传参中:与接口中参数个数、顺序一致
-arg0 arg1…
-param1 param2…接口:public void insert(String name)
2,实体传参
实参的属性名即为参数名
接口:public void insert(User user); //User: name/pass/tel sql: <insert id="" parameterType="user"> insert into tb_user(u_name,u_pass,u_tel) values(#{name},#{pass},#{tel}) </insert>
3,单个参数传参
当参数只有一个值时,可任任意命名参数名
接口:int deleteById(int id); User selectOne(String name); sql: delete from tb_user where u_id=#{id} select * from tb_user where u_name like concat('%',#{username},'%')
4,注解传参
@Param—mybatis提供的
// name表示方法的形参名 // uname表示传给mybatis的sql里的参数名 接口:User selectOne(@Param("uname")String name,@Param("upass")String pass); sql: select * from tb_user where u_name=#{uname} and u_pass=#{upass}
5,map传参
使用parameternalType = “map”
通过的map中的key值进行传值
测试类: Map map=new HashMap<String String>(); map.put(键值,值);//map.put("name","admin"); map.put(键值,值);//map.put("oass","124"); 接口:User selectOne(Map map);//集合中可以存储多对键值对 sql: <select id="" parameterType="map" resultType="user"> select * from tb_user where u_name=#{map的键值名} and u_pass=#{map的键值名} </select>
添加回填功能
自增主键回填功能
<insert id ="方法名" parameterType = "user传参的实体类型">
<selectKey keyProperty="uid实体属性名",resultType="Integer主键类型" order="after主键生成顺序">
select last_insert_id ----获取最后一次添加的id
</selectKey>
insert into tb_user values (#{uid},#{name},#{pass},#{tel},#{mail})
</insert>
非自增主键回填功能
<insert id ="方法名" parameterType = "order传参的实体类型">
<selectKey keyProperty="oid实体属性名",resultType="String主键类型" order="before主键生成顺序">
select REPLACE(uuid(),'-','') ---生成一个随机字符串
</selectKey>
insert into sys_orders values(#{oid},#{uid},#{total},#{tel},#{addr},#{oname})
</insert>
注:当主键是字符类型时,需要提交生成字符的值,再将这个值赋值给实体属性;
查询
resultMap的用法( 基本的字段和属性的映射/对多关系/对一关系)
collection对多关系的标签
association对一关系的标签
1,单表查询
别名查询
当实体的属性名与表字段名不一致时,可以使用给字段定义别名,实现表字段与实体类属性之间的映射;
<select id="" resultType="返回数据对应的封装的实体类型"> select * from 表 </select>
resultMap映射
resultMap映射:当实体的属性名与表字段名不一致时,可以使用resultMap实现映射
<resultMap id="唯一base" type="返回数据对应的封装的实体类型"> <id column="列名称" property="属性名" /> //表示主键字段 <result column="列名称" property="属性名" /> //表示非主键字段 。。。。若干result标签表示非主键字段 </resultMap> <select id="" resultMap="resultMap的id值-base"> select * from 表 </select>
2,一对多查询
用户实体类:User
private Integer uid;
private String uname;
...用户基本信息
private List<Orders> ordereList;//用于表示一对多的关系;表示一个用户有多个订单信息;
订单实体类:Orders
private String oid;
private String oname;
.....订单基本信息;
用户的映射元文件:UserMapper.xml-->以用户表为主,返回实体是User类
resultMap标签:
<resultMap id="base" type="user">
<id column="主键字段" property="实体属性名"/>
<result column="非主键字段" property="实体属性名"/>
....
<collection property="ordereList对多属性名" ofType="orders集合属性的泛型类型">
...订单c表和订单实体类之间的映射关系
</collection>
</resultMap>
//多表联合查询:左外/右外/内连接/等值连接.....
<select id="select" resultMap="base">
select * from sys_user u,sys_order o where u.u_id=o.u_id where u.u_name=#{} and u.u_pass=#{}
</select>
3,一对一查询
用户实体类:User
private Integer uid;
private String uname;
...用户基本信息
订单实体类:Orders
private String oid;
private String oname;
.....订单基本信息;
private User user;//对一属性
用户的映射元文件:OrderMapper.xml-->返回值的实体是Orders
//多表联合查询:左外/右外/内连接/等值连接。。。
<select id="select" resultMap="base">
select * from sys_user u,sys_order o where u.u_id=o.u_id where o.o_id=#{oid}
</select>
resultMap标签:
<resultMap id="base" type="orders">
<id column="主键字段" property="实体属性名"/>
<result column="非主键字段" property="实体属性名"/>
....
<association property="user" javaType="对一属性的类型">
..用户基本信息的映射
</association>
</resultMap>
lombok插件
-------idea插件
在idea中安装插件:settings–>plugin
搜索 lombok install 重启idea
-------在pom.xml中引入依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.22</version> </dependency>
使用注解生成相关方法,构造等
getter/setter toString equals 无参/有参构造 @Data //生成get/set @AllArgsConstructor //全参构造 @NoArgsConstructor //无参构造 @RequiredArgsConstructor //个别参数构造,与@NonNull注解对应 public class User { @NonNull private String name; //属性 @NonNull private int age; //属性 private String sex; //属性 ..... }