mybatis第二天


mybatis第二天

  • 1.mybatis 别名设置和sql片段
      • 1.1对别名进行设置
      • 1.2sql片段设置
  • 2.动态sql
    • 2.1动态组合查询
      • 2.1.1查询类的编写
      • 2.1.2映射文件的编写
      • 2.1.3测试类
    • 2.2动态修改
      • 2.2.1集合在sql中的使用(添加数据)

1.mybatis 别名设置和sql片段 1.1对别名进行设置
在sqlMapConfig.xml中可以对类型设置别名


1.2sql片段设置
设置sql片段一般是提取公用的sql在映射文件中写

person_id,name,gender,person_addr,birthday

引用sql片段

2.动态sql 2.1动态组合查询 2.1.1查询类的编写
设置查询类用来接收属性字段的值

public class PersonQueryCondition extends Person{ private String name; private Integer gender; private Date birthday; private String personAddr; @Override public String getName() { return name; }@Override public void setName(String name) { this.name = name; }@Override public Integer getGender() { return gender; }@Override public void setGender(Integer gender) { this.gender = gender; }@Override public Date getBirthday() { return birthday; }@Override public void setBirthday(Date birthday) { this.birthday = birthday; }@Override public String getPersonAddr() { return personAddr; }@Override public void setPersonAddr(String personAddr) { this.personAddr = personAddr; } }

2.1.2映射文件的编写
这儿的qc是别名


2.1.3测试类
@Test public void test() { SqlSession session = sf.openSession(); try { PersonQueryCondition qc = new PersonQueryCondition(); qc.setName("信"); qc.setPersonAddr("打"); qc.setBirthday(new Date()); qc.setGender(1); List personList = session.selectList("configure.mapper.PersonMapper.selectPeron",qc); for (Person person : personList) { System.out.println(person); } }finally { session.close(); } }

2.2动态修改 配置文件
update person p /* 加p.person_id=#{personId}是防止所有条件为空的情况下的, 不要忘记加上 p.person_id=#{personId},mybatis逆向工程没有这个 必须手动加上 */ p.person_id=#{personId}, p.name=#{name}, p.gender=#{gender}, p.person_addr=#{personAddr}, p.birthday=#{birthday} p.person_id=#{personId}

测试类
@Test public void update() { SqlSession session = sf.openSession(); try { Person person = new Person(); person.setPersonId(1); //person.setGender(1); session.update("configure.mapper.PersonMapper.dynamicUpdate", person); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally { session.close(); } }

2.2.1集合在sql中的使用(添加数据)
解决select *from 表 t where t.xxx in(); 的问题 例如:select *from person p where p.person_id in(1,2,3);

配置文件
parameterType只能是map类型 map.put("ids",value),value的值可以是数组,list foreach是遍历集合组装sql oepn:以某种字符开始 close:以某种字符结束 separator:以某种字符做分隔


测试类
@Test public void selectPerson() { SqlSession session = sf.openSession(); try { Integer[] id=new Integer[]{1,2,3}; Map map=new HashMap<>(); map.put("ids",id); List personList = session.selectList("configure.mapper.PersonMapper.selectPersonByIn", map); for (Person person : personList) { System.out.println(person); } }finally { session.close(); } }

批量做入库处理

【mybatis第二天】测试类
@Test public void insertPerson() { SqlSession session = sf.openSession(); try { Map map=new HashMap<>(); List personList=new ArrayList<>(); for (int i = 0; i <1000008; i++) { Person person = new Person(); person.setName("张三"+i); person.setGender(1); SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:SS"); String date = format.format(new Date()); person.setBirthday(format.parse(date)); person.setPersonAddr("北京"+i); personList.add(person); if (i%100==0) { map.put("personList",personList); session.insert("configure.mapper.PersonMapper.insertPerson", map); //将集合清空 personList.clear(); } } map.put("personList",personList); session.insert("configure.mapper.PersonMapper.insertPerson",map); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally { session.close(); } }

    推荐阅读