目录
一、向sql语句传参
二、数据输入
三、数据输出
四、别名
1.基本使用MyBatis框架
使用到的jar包如下:
org.junit.jupiter
junit-jupiter
RELEASE
test
org.mybatis
mybatis
3.5.7
mysql
mysql-connector-java
8.0.33
使用MyBatis需要实现一个实体类对应一张表对应一个业务接口对应一个mapper映射
其中的mapper映射相当于业务接口的实现类。只不过通过mapper.xml配置文件将Java代码和sql代码实现区分。
注意:在业务接口中定义的方法不能进行重载,因为通过xml配置时候,配置对于的方法sql语句只看方法名称。
如下:
public interface EmployeeMapper {
//通过id查找员工
Employee queryById(Integer id);
//通过id name 查找员工
Employee queryById(Integer id,String name);
}
由于使用了相同的方法名称,会导致在xml根据方法名称封装对于sql语句时候出现问题。
2.使用${ key } 和 #{ key }传参
案例代码:
区别:
#{key}的本质是进行占位符处理,在代码中替代id的值。【推荐使用】
${key}的本质是进行拼接字符串,在案例代码中即封装成一个完整的sql语句。
注意:使用#{key}的值代替时候,不能传入列名,容器名。
3.实现MyBatis测试功能
完成测试功能需要实现以下几个步骤
1.创建ibatis的资源类 is
2.创建SqlSessionFactoryBuilder对象并进行Build( is ) 获取SqlSessionFactory对象
3.通过SqlSessionFactory对象的openSession方法获取SqlSession
4.获取Mapper对象
5.执行对于操作
6.提交事务和关闭相关流
案例代码:
public class MybatisTest {
@Test
public void Test() throws IOException {
//步骤1,读取资源
InputStream is = Resources.getResourceAsStream("mybatisConfig.xml");
//步骤2,创建sqlSessionFactory
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//步骤3,创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//步骤4,获取Mapper对象
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
//执行对应操作
Employee employee = employeeMapper.queryById(1);
System.out.println(employee);
//管理事务提交与关闭操作
sqlSession.close();
}
}
数据输入的概念:
这里数据输入具体是指上层方法(例如Service方法)调用Mapper接口时,数据传入的形式。
1.单个简单数据类型
由于只有一个简单参数,所以#{key}或者${key}中的key可以填写任意的值,当然推荐还是使用原本的参数名。
2.实体对象类型
当传入的数据是实体对象类型时候,只需要一一对应其属性即可
案例:
3.多个简单数据类型
当出现业务方法中有多个参数时候注意此时#{key}或者${key}中的key不能乱写,并且也不能通过形参的方式直接输入。面对多个简单数据类型的输入有两种方案解决问题。
3.1 使用注解参数解决
需要用到@Param注解
案例:
3.2使用顺序方式解决
参数还可以arg0 、arg1...的顺序进行参数匹配
案例代码:
4.map类型
传入key=map即可
接口对应的抽象方法
int updateEmployeeByMap(Map paramMap);
对应的sql语句
update t_emp set emp_salary=#{empSalaryKey} where emp_id=#{empIdKey}
使用场景
有很多零散的参数需要传递,但是没有对应的实体类类型可以使用。使用@Param注解一个一个传入又太麻烦了。所以都封装到Map中。
数据输出概念:
数据输出总体上有两种形式:
我们需要做的是,指定查询的输出数据类型即可!
并且插入场景下,实现主键数据回显示!
1.单个简单类型
在一般的简单类型中,Java都有对应的简写,可以用String int 去取代java.lang.String等
2.返回实体类对象
返回类的全限定符加类名
3.返回Map类型
4.返回List类型
5.返回主键值
insert into t_emp(emp_name,emp_salary)
values(#{empName},#{empSalary})
由于输出返回值时候要填写的内容包括类的全限定符,这种操作比较麻烦,所以Java中自带了72种默认的别名,比如java.lang.String可以直接写为String等等。但是对于一般的实体对象类型是没有
1.xml设置别名
在MyBatis-config.xml中进行配置
单个起别名
案例代码:
包起别名
当在包起别名的时候,在包下所有的类的别名都对应其类名
2.注解别名
如果认为在xml中配置十分麻烦并且不美观,则可以在实体类中对应使用注解方式进行起别名