目录
通过该属性,可以指定一个外部的 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值,名字随便起
当然使用一个配置文件在另外一个文件中自然需要引入(在前面引入)
-
-
- <properties resource="jdbc.properties"/>
- <property name="driver" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.user}"/>
- <property name="password" value="${jdbc.pwd}"/>
这是mybatis中极为重要的调整设置,他们会改变mybatis的运行时行为

-
- <typeAliases>
-
-
-
- <package name="com.hong.entity"/>
- typeAliases>
就可以直接使用类名操作了

1. resource 注册 Mapper 文件: XXXMapper.xml 文件(常用,使用过)
2. class:接口注解实现(使用过)
-
- <mapper class="com.hong.mapper.MonsterAnnotation"/>
3. url:外部路径,使用很少,不推荐,
4. package 方式注册 :
-
解读
1. 当一个包下有很多的Mapper.xml文件和基于注解实现的接口时,为了方便,我们可以以包方式进行注册
2. 将下面的所有xml文件和注解接口 都进行注册

代码:案例1
- //通过id 或者名字查询
- public List
findMonsterByNameORId(Monster monster);
- <mapper namespace="com.hong.mapper.MonsterMapper">
-
-
- <select id="findMonsterByNameORId" parameterType="Monster" resultType="Monster">
- SELECT * FROM `monster` WHERE `id` = #{id} OR `name` = #{name}
- select>
- mapper>
- 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("操作成功~");
- }
案例二:
-
- <select id="findMonsterByName" parameterType="String" resultType="Monster">
- SELECT * FROM `monster` WHERE `name` LIKE '%${name}%'
- select>
- 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) ;
- <select id="findMonsterByIdAndSalary_PrameterHashMap" parameterType="map" resultType="Monster">
- SELECT * FROM monster
- WHERE id > #{id} AND salary > #{salary}
- select>
- 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
- findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap(Map
map) ;
- <select id="findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap" parameterType="map" resultType="map">
- SELECT * FROM `monster` WHERE `id` > #{id} AND `salary` > #{salary}
- select>
- public void findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap() {
-
- Map
map = new HashMap<>(); - map.put("id", 10);
- map.put("salary", 40);
- List
- monsterMapper.findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap(map);
-
- //取出返回的结果-以map取出
- //回顾java基础,map遍历
- for (Map
monsterMap : monsterList) { - //System.out.println("monsterMap-" + monsterMap);
-
- //遍历monsterMap(方式1) ,取出属性和对应值
- //Set
keys = monsterMap.keySet(); - //for (String key : keys) {
- // System.out.println(key + "=>" + monsterMap.get(key));
- //}
-
- //遍历monsterMap(方式2) ,取出属性和对应值
- for (Map.Entry
entry : monsterMap.entrySet()) { - System.out.println(entry.getKey() + "==>" + entry.getValue());
- }
- System.out.println("------------------------");
- }
-
- if (sqlSession != null) {
- sqlSession.close();
- }
-
- System.out.println("操作成功~");
-
- }
简单理解:就是当数据库中的字段名和我们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中的配置(主要就在这里)
- <mapper namespace="com.hong.mapper.UserMapper">
-
-
- <insert id="addUser" parameterType="User">
- INSERT INTO `user` (`user_email`,`user_name`)
- VALUE (#{useremail}, #{username})
- insert>
-
-
- <resultMap id="findAllUserMap" type="User">
- <result column="user_email" property="useremail"/>
- <result column="user_name" property="username"/>
- resultMap>
- <select id="findAllUser" resultMap="findAllUserMap">
- SELECT * FROM `user`
- select>
-
-
-
-
-
-
- mapper>
测试
- 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("jack@qq.com");
-
- 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~");
- }
-
-
-
-