在sqlMapConfig.xml中可以对类型设置别名
<typeAliases>
<typeAlias type="model.Emp" alias="emp"/>
<typeAlias type="model.Person" alias="peson"/>
</typeAliases>
设置sql片段一般是提取公用的sql在映射文件中写
<sql id="colums">
person_id,name,gender,person_addr,birthday
</sql>
引用sql片段
<select id="selectAllEmp" resultMap="baseResultMap">
select <include refid="colums"/> from person
</select>
设置查询类用来接收属性字段的值
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;
}
}
这儿的qc是别名
<!--
<where>用于动态条件组合查询,可以去掉where后的第一个and
-->
<select id="selectPeron" parameterType="qc" resultMap="baseResultMap">
select *from person p
<where>
<if test="name!=null">
p.name like '%${name}%'
</if>
<if test="gender!=null">
and p.gender=#{gender}
</if>
<if test="personAddr!=null">
and p.person_addr like '%${personAddr}%'
</if>
<if test="birthday!=null">
<![CDATA[
and p.birthday< #{birthday}
]]>
</if>
</where>
</select>
@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<Person> personList = session.selectList("configure.mapper.PersonMapper.selectPeron",qc);
for (Person person : personList) {
System.out.println(person);
}
}finally {
session.close();
}
}
配置文件
<!--动态修改 可以去掉where前的第一个“,”-->
<update id="dynamicUpdate" parameterType="person">
update person p
<set>
/*
加p.person_id=#{personId}是防止所有条件为空的情况下的,
不要忘记加上 p.person_id=#{personId},mybatis逆向工程没有这个
必须手动加上
*/
p.person_id=#{personId},
<if test="name!=null">
p.name=#{name},
</if>
<if test="gender!=null">
p.gender=#{gender},
</if>
<if test="personAddr!=null">
p.person_addr=#{personAddr},
</if>
<if test="birthday!=null">
p.birthday=#{birthday}
</if>
</set>
<where>
p.person_id=#{personId}
</where>
</update>
测试类
@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();
}
}
解决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:以某种字符做分隔
<!--parameterType只能是map类型 map.put("ids",value),value的值可以是数组,list-->
<select id="selectPersonByIn" parameterType="map" resultMap="baseResultMap">
select * from person p where p.person_id in
<foreach collection="ids" open="(" close=")" item="id" separator=",">
#{id}
</foreach>
</select>
测试类
@Test
public void selectPerson() {
SqlSession session = sf.openSession();
try {
Integer[] id=new Integer[]{1,2,3};
Map<String,Object> map=new HashMap<>();
map.put("ids",id);
List<Person> personList = session.selectList("configure.mapper.PersonMapper.selectPersonByIn", map);
for (Person person : personList) {
System.out.println(person);
}
}finally {
session.close();
}
}
批量做入库处理
测试类
@Test
public void insertPerson() {
SqlSession session = sf.openSession();
try {
Map<String,Object> map=new HashMap<>();
List<Person> 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();
}
}