Mybatis动态语句
动态语句if和where标签123456789101112131415161718192021<!-- List<Employee> selectEmployeeByCondition(Employee employee); --><select id="selectEmployeeByCondition" resultType="employee"> select emp_id,emp_name,emp_salary from t_emp <!-- where标签会自动去掉“标签体内前面多余的and/or” --> <where> <!-- 使用if标签,让我们可以有选择的加入SQL语句的片段。这个SQL语句片段是否要加入整个SQL语句,就看if标签判断的结果是否为true --> <!-- 在if标签的test属性中,可以访问实体类的属性,不可以访问数据库表的字段 --> <if test=&q ...
Mybatis的多表映射
多表映射实体类设计12345678910111213141516@Datapublic class Customer { private Integer customerId; private String customerName; private List<Order> orderList;// 体现的是对多的关系 } @Datapublic class Order { private Integer orderId; private String orderName; private Customer customer;// 体现的是对一的关系 }
对一映射
需求说明根据ID查询订单,以及订单关联的用户的信息
OrderMapper接口
123public interface OrderMapper { Order selectOrderWithCustomer(Integer orderId);}
OrderMapper.xml配置文件
123456789101112131 ...
Mybatis基本使用
Mybatis基本使用向SQL语句传参
#{}形式Mybatis会将SQl语句中的#{}转化为问号占位符,可以防止sql注入
#{id}被替换为?
${}形式${}形式传参,底层Mybatis做的是字符串拼接操作。通常不会采用${}的方式传值。一个特定的适用场景是:通过Java程序动态生成数据库表,表名部分需要Java程序通过参数传入;而JDBC对于表名部分是不能使用问号占位符的,此时只能使用
结论:实际开发中,能用#{}实现的,肯定不用${}。
特殊情况: 动态的不是值,是列名或者关键字,需要使用${}拼接
数据输入概念说明这里数据输入具体是指上层方法(例如Service方法)调用Mapper接口时,数据传入的形式。
简单类型:只包含一个值的数据类型
基本数据类型:int、byte、short、double、……
基本数据类型的包装类型:Integer、Character、Double、……
字符串类型:String
复杂类型:包含多个值的数据类型
实体类类型:Employee、Department、……
集合类型:List、Set、Map、……
数组类型:int[]、 ...
MyBatis的基础结构
MyBatis的基础结构
准备数据模型
1234567891011121314CREATE DATABASE `mybatis-example`;USE `mybatis-example`;CREATE TABLE `t_emp`( emp_id INT AUTO_INCREMENT, emp_name CHAR(100), emp_salary DOUBLE(10,5), PRIMARY KEY(emp_id));INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("tom",200.33);INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("jerry",666.66);INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("andy",777.77);
项目搭建和准备依赖导入pom.xml
12345678910111213141516171819202122<depen ...
第一篇文章
这是我的第一篇文章