目录
一.mybatis-config.xml-配置文件详解
1.说明
2.properties 属性
3.settings 全局参数定义--》通常使用默认
4.typeAliases 别名处理器
5.typeHandlers 类型处理器
6.environments 环境
二.XxxxMapper.xml-SQL 映射文件
1.XxxMapper.xml-基本介绍
2.XxxMapper.xml-详细说明
2.1基本使用
3.parameterType(输入参数类型)
4.传入 HashMap
5.resultMap(结果集映射)
注意事项和细节
通过该属性,可以指定一个外部的 jdbc.properties 文件,引入我们的 jdbc 连接信息
代码演示
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
jdbc.user=root
jdbc.pwd=hong
jdbc.driver就是key值,名字随便起
当然使用一个配置文件在另外一个文件中自然需要引入(在前面引入)
这是mybatis中极为重要的调整设置,他们会改变mybatis的运行时行为
就可以直接使用类名操作了
1. resource 注册 Mapper 文件: XXXMapper.xml 文件(常用,使用过)
2. class:接口注解实现(使用过)
3. url:外部路径,使用很少,不推荐,
4. package 方式注册 :
解读
1. 当一个包下有很多的Mapper.xml文件和基于注解实现的接口时,为了方便,我们可以以包方式进行注册
2. 将下面的所有xml文件和注解接口 都进行注册
代码:案例1
//通过id 或者名字查询
public List findMonsterByNameORId(Monster monster);
public void findMonsterByNameORId() {
Monster monster = new Monster();
monster.setId(1);
monster.setName("狐狸精-100");
List monsters =
monsterMapper.findMonsterByNameORId(monster);
for (Monster m : monsters) {
System.out.println("m-" + m);
}
if (sqlSession != null) {
sqlSession.close();
}
System.out.println("操作成功~");
}
案例二:
public void findMonsterByName() {
List monsters = monsterMapper.findMonsterByName("牛魔王");
for (Monster monster : monsters) {
System.out.println("monster--" + monster);
}
if (sqlSession != null) {
sqlSession.close();
}
System.out.println("操作成功~");
}
//查询 id > 10 并且 salary 大于 40, 要求传入的参数是 HashMap
public List
findMonsterByIdAndSalary_PrameterHashMap(Map map);
public void findMonsterByIdAndSalary_PrameterHashMap() {
//Diamond types are not supported at language level '5'
//如何解决.=> 在pom.xml文件中指定编译器版本
/*
UTF-8
1.8
1.8
1.8
*/
Map map = new HashMap<>();
map.put("id", 10);
map.put("salary", 40);
List monsters =
monsterMapper.findMonsterByIdAndSalary_PrameterHashMap(map);
for (Monster monster : monsters) {
System.out.println("monster--" + monster);
}
if (sqlSession != null) {
sqlSession.close();
}
System.out.println("操作成功~");
}
//查询 id > 10 并且 salary 大于 40, 要求传入的参数是 HashMap
public List
public void findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap() {
Map map = new HashMap<>();
map.put("id", 10);
map.put("salary", 40);
List
简单理解:就是当数据库中的字段名和我们pojo的属性名不一样的时候(因为我们在填写对应的xml文件的时候#{}要和属性名一样),使用resultMap 做一个专门的映射指定就可以找到了。我理解为就是将数据库的字段改变成属性的名字。
举例:
User表字段:
`user_id` INT NOT NULL AUTO_INCREMENT,
`user_email` VARCHAR(255) DEFAULT '',
`user_name` VARCHAR(255) DEFAULT '',
pojo类属性:
private Integer user_id;
private String username;
private String useremail;
xml中的配置(主要就在这里)
INSERT INTO `user` (`user_email`,`user_name`)
VALUE (#{useremail}, #{username})
测试
public class UserMapperTest {
//属性
private SqlSession sqlSession;
private UserMapper userMapper;
//初始化
@Before
public void init() {
sqlSession = MyBatisUtils.getSqlSession();
userMapper = sqlSession.getMapper(UserMapper.class);
}
@Test
public void addUser() {
User user = new User();
user.setUsername("jack");
user.setUseremail("[email protected]");
userMapper.addUser(user);
//如果是增删改, 需要commit()
if(sqlSession != null) {
sqlSession.commit();
sqlSession.close();
}
System.out.println("操作OK~");
}
@Test
public void findAllUser() {
List users = userMapper.findAllUser();
for (User user : users) {
System.out.println("user--" + user);
}
if(sqlSession != null) {
sqlSession.close();
}
System.out.println("操作OK~");
}