mybatis实战:二、mybatis xml 方式的基本用法
创始人
2024-03-07 23:54:07

注释都在代码里,最好复制了再看!


1.创建表

CREATE TABLE sys_user(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户 ID',
user_name VARCHAR(50) COMMENT '用户名',
user_password VARCHAR(50) COMMENT '密码',
user_email VARCHAR(50) COMMENT '邮箱',
user_info TEXT COMMENT '简介',
head_img BLOB COMMENT '头像',
create_time DATETIME COMMENT '创建时间',
PRIMARY KEY (id) 
);
ALTER TABLE sys_user COMMENT '用户表';CREATE TABLE sys_role(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色 ID',
role_name VARCHAR(50) COMMENT '角色名',
enabled INT COMMENT '有效标志',
create_by BIGINT COMMENT '创建人',
create_time DATETIME COMMENT '创建时间',
PRIMARY KEY (id) 
);
ALTER TABLE sys_role COMMENT '角色表';CREATE TABLE sys_prvilege(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '权限  ID',
privilege_name VARCHAR(50) COMMENT '权限名称',
privilege_url VARCHAR (200) COMMENT '权限 URL',
PRIMARY KEY (id) 
);
ALTER TABLE sys_prvilege COMMENT '权限表';CREATE TABLE sys_user_role( 
user_id BIGINT COMMENT '用户 ID ',
role_id BIGINT COMMENT '角色 ID'
);
ALTER TABLE sys_user_role COMMENT '用户角色关联表';CREATE TABLE sys_role_prvilege(
role_id BIGINT COMMENT '角色ID',
privilege_id BIGINT COMMENT 'ID' 
);
ALTER TABLE sys_role_prvilege COMMENT '角色权限关联表';

2.插入数据

CREATE TABLE sys_user(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户 ID',
user_name VARCHAR(50) COMMENT '用户名',
user_password VARCHAR(50) COMMENT '密码',
user_email VARCHAR(50) COMMENT '邮箱',
user_info TEXT COMMENT '简介',
head_img BLOB COMMENT '头像',
create_time DATETIME COMMENT '创建时间',
PRIMARY KEY (id) 
);
ALTER TABLE sys_user COMMENT '用户表';CREATE TABLE sys_role(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色 ID',
role_name VARCHAR(50) COMMENT '角色名',
enabled INT COMMENT '有效标志',
create_by BIGINT COMMENT '创建人',
create_time DATETIME COMMENT '创建时间',
PRIMARY KEY (id) 
);
ALTER TABLE sys_role COMMENT '角色表';CREATE TABLE sys_prvilege(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '权限  ID',
privilege_name VARCHAR(50) COMMENT '权限名称',
privilege_url VARCHAR (200) COMMENT '权限 URL',
PRIMARY KEY (id) 
);
ALTER TABLE sys_prvilege COMMENT '权限表';CREATE TABLE sys_user_role( 
user_id BIGINT COMMENT '用户 ID ',
role_id BIGINT COMMENT '角色 ID'
);
ALTER TABLE sys_user_role COMMENT '用户角色关联表';CREATE TABLE sys_role_prvilege(
role_id BIGINT COMMENT '角色ID',
privilege_id BIGINT COMMENT 'ID' 
);
ALTER TABLE sys_role_prvilege COMMENT '角色权限关联表';INSERT INTO sys_user VALUES ('2','admin','123456','admin@mybatis.tk','管理员',NULL,'2016-04-01 17:00:58'); 
INSERT INTO sys_user VALUES ('1001','test','123456','test@mybatis.tk','测试用户',NULL,'2016-04-01 17:00:58'); 
INSERT INTO sys_role VALUES ('1','管理员','1','1','2016-04-01 17:02:14'); 
INSERT INTO sys_role VALUES ('2','普通用户','1','1','2016-04-01 17:02:34');
INSERT INTO sys_user_role VALUES ('1','1'); 
INSERT INTO sys_user_role VALUES ('1','2');  
INSERT INTO sys_user_role VALUES ('3','2'); 
INSERT INTO sys_prvilege VALUES ('1','用户管理','/users'); 
INSERT INTO sys_prvilege VALUES ('2','角色管理','/roles'); 
INSERT INTO sys_prvilege VALUES ('3','系统日志','/logs'); 
INSERT INTO sys_prvilege VALUES ('4','人员维护','/persons'); 
INSERT INTO sys_prvilege VALUES ('5','单位维护','/companies'); 
INSERT INTO sys_role_prvilege VALUES ('1','l'); 
INSERT INTO sys_role_prvilege VALUES ('1','1001'); 
INSERT INTO sys_role_prvilege VALUES ('1','2');  
INSERT INTO sys_role_prvilege VALUES ('2','4'); 
INSERT INTO sys_role_prvilege VALUES ('2','5'); 

3.创建实体类

package tk.mybatis.simple.model;import java.util.Date;import lombok.Data;@Data
public class SysUser {private Long id;private String userName;private String userPassword;private String userInfo;private byte[] headImg;private Date createTime;private String userEmail;
}

@Date可以省略get、set方法,要导入依赖、下载插件才可以使用

org.projectlomboklombok1.18.24

package tk.mybatis.simple.model;import lombok.Data;@Data
public class SysUserRole {private Long userId;private Long roleId;
}

4.Mapper

创建一下文件

xml:

需要注意 是<mapper >根标签 name space 属性。当 app 接口和 XM 文件关联的时候,命名空间口amespace 值就需要配置成接口的全限定名称,例如 UserMapper 接口对 应的 tk.mybat. simple.mapper.UserMapper内部就是通过这个值将接口和XML 关联起来的。








 mybatis-config.xml

5.UserMapper.xml
























6.BaseMapperTest

package tk.mybatis.simple.mapper;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;import java.io.IOException;
import java.io.Reader;public class BaseMapperTest {private static SqlSessionFactory sqlSessionFactory;@BeforeClasspublic static void init () {try {Reader reader = Resources.getResourceAsReader ("mybatis-config.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);reader.close();} catch (IOException ignore) {ignore.printStackTrace();}}public SqlSession getSqlSession () {return sqlSessionFactory.openSession();}
}

7.CountryMapperTest

package tk.mybatis.simple.mapper;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import tk.mybatis.simple.model.Country;
import tk.mybatis.simple.model.SysUser;import java.io.IOException;
import java.io.Reader;
import java.util.List;public class CountryMapperTest extends BaseMapperTest {private static SqlSessionFactory sqlSessionFactory;//    @BeforeClass
//    public static void init() {
//        try {通过 Resources 工具类将 ti -config.xm 配置文件读入 Reader
//            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");再通过 SqlSessionFactoryBuilder 建造类使用 Reader 创建 SqlSessionFactory工厂对象。在创建 SqlSessionFactory 对象的过程中首先解 mybatis-config.xml 配置文件,读取配置文件中的 mappers 配置后会读取全部的 Mapper xml 进行具体方法的解析,在这些解析完成后, SqlSessionFactory 就包含了所有的属性配置和执行 SQL 的信息。
//            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);使用时通过 SqlSessionFactory 工厂对象获取 splSession
//            reader.close();
//        } catch (IOException ignore) {
//            ignore.printStackTrace();
//        }
//    }
//
//    private void printCountryList(List countryList) {
//        for (Country country : countryList) {
//            System.out.printf("%-4d%4s%4s\n", country.getId(), country.getCountryname(), country.getCountrycode());
//        }
//    }@Testpublic void testSelectByid() {SqlSession sqlSession = getSqlSession();try {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);SysUser user = userMapper.selectById((long) 1);Assert.assertNotNull(user);Assert.assertEquals("admin", user.getUserName());} finally {sqlSession.close();}}@Testpublic void testSelectAll() {SqlSession sqlSession = getSqlSession();try {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List userList = userMapper.selectAll();Assert.assertNotNull(userList);Assert.assertTrue(userList.size() > 0);} finally {sqlSession.close();}}
}

8.运行结果

9.总结

(1)mapper接口存放在java下的mapper包里,mapper.xml存放在资源包下面!

namespace的值是对应的mapper接口的全限定名称

 

(2)实体类用驼峰命名法,sql 里的映射

1.用别名法映射

2.自动映射

配置:

 3.使用 resultMap

 

 

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...