以多的一方为主表
接口
//级联查询 N-1
List selectEmp(Map map);
映射文件
一的一方的数据封装使用association标签
使用JavaType固定搭配
对应javabean中的属性
测试类
SqlSession session=null;
@Before
public void init() throws IOException {
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
session=factory.openSession();
}
//级联查询N-1
@Test
public void selectEmp() {
HashMap map = new HashMap();
map.put("name","关");
map.put("start",0);
map.put("size",3);
List emps = session.getMapper(EmpMapper.class).selectEmp(map);
System.out.println(emps);
}
@After
public void destory(){
if (session!=null){
try {
session.commit();
}catch (Exception e){
session.rollback();
}finally {
session.close();
}
}
}
以一的一方为主表
映射文件
多的一方的数据使用collection标签封装
固定搭配 ofType
对应javabean中的属性
测试类
SqlSession session=null;
@Before
public void init() throws IOException {
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
session=factory.openSession();
}
//级联查询1-N
@Test
public void selectDept() {
HashMap map = new HashMap();
map.put("dname","蜀");
map.put("start",0);
map.put("size",3);
List depts = session.getMapper(EmpMapper.class).selectDept(map);
System.out.println(depts);
}
@After
public void destory(){
if (session!=null){
try {
session.commit();
}catch (Exception e){
session.rollback();
}finally {
session.close();
}
}
}
总结
一对多 以一的一方为主表; 多对一 以多的一方为主表
Association 封装一的一方的数据,固定类型搭配 javaType。
collection封装多的一方的数据,固定类型搭配 ofType。
org.mybatis.generator
mybatis-generator-core
1.3.5
com.itfsw
mybatis-generator-plugin
1.0.5
org.slf4j
slf4j-nop
1.7.25
test
此配置文件必须放在整个工程的目录下
可能需要修改的部分:
@Test
public void create() throws Exception{
List warnings = new ArrayList();
boolean overwrite = true;
File configFile = new File("MybatisGenerator.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator =
new MyBatisGenerator(config,callback,warnings);
myBatisGenerator.generate(null);
}
注意
在准备工作都完成之后,执行测试方法,即可自动生成成javabean 和 接口 以及 映射文件
在生成的pojo中还有一个Example类 该类封装了所有属性的各种条件查询
通过example对象创建criteria对象,该对象通过sql拼接的方式 实现条件的封装,所以开发人员只需要调用相应
方法即可完成带条件的增删改查。
逆向工程没有提供 分页查询 和两个表的 级联查询 这一块需要我们自己去补充添加。
@Test//修改
public void update() {
Emp emp = new Emp();
emp.setName("虚竹");
EmpExample example = new EmpExample();
EmpExample.Criteria criteria = example.createCriteria();
criteria.andNameLike("%小%");
int i = session.getMapper(EmpMapper.class).updateByExampleSelective(emp, example);
System.out.println(i);
}
@Test//条件查询
public void select(){
EmpExample example = new EmpExample();
EmpExample.Criteria criteria = example.createCriteria();
criteria.andNameLike("%%");
example.limit(5,5);
List emps = session.getMapper(EmpMapper.class).selectByExample(example);
System.out.println(emps);
}
@Test//动态新增
public void insert(){
Emp emp = new Emp();
emp.setName("萧寒");
emp.setSex("男");
emp.setAge(22);
emp.setBonus(1500.00);
int i = session.getMapper(EmpMapper.class).insertSelective(emp);
System.out.println(i);
}
@Test//删除
public void delete(){
EmpExample example = new EmpExample();
EmpExample.Criteria criteria = example.createCriteria();
criteria.andNameLike("%彭%");
int i = session.getMapper(EmpMapper.class).deleteByExample(example);
System.out.println(i);
}