题目:
一个商户,在登记的时候需要注册它的经营范围。比如1手机,2电脑,3相机,4平板,在界面上是一个复选框(checkbox)。
在数据库保存的是用逗号分隔的字符串,例如“1,3,4”,而返回给程序的时候是整形数组List {1,3,4}。
实现一个TypeHandler,可以把List转换成数据库的varchar。把数据库的vachar转换成List。
自定义typeHandler
public class TestTypeHandler extends BaseTypeHandler<List<Integer>> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<Integer> parameter, JdbcType jdbcType) throws SQLException {
StringBuffer str=new StringBuffer();
for (Integer a:parameter) {
str.append(String.valueOf(a)).append(",");
}
ps.setString(i,str.toString().substring(0,str.toString().length()-1));
}
@Override
public List getNullableResult(ResultSet rs, String columnName) throws SQLException {
String str[]=rs.getString(columnName).split(",");
return Arrays.asList(str);
}
@Override
public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String str[]=rs.getString(columnIndex).split(",");
return Arrays.asList(str);
}
@Override
public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String str[]=cs.getString(columnIndex).split(",");
return Arrays.asList(str);
}
}
Bean
@Data
public class TestBean {
private Integer id;
private String name;
private List<Integer> number;
}
Mapper接口
public interface BaseInfoMapper {
TestBean select(Integer id);
int insert(@Param("test") TestBean testBean);
}
XML映射器
<resultMap id="testMap" type="com.graduate.platform.researchworkers.entity.TestBean">
<id property="id" column="ID"/>
<result property="name" column="NAME"/>
<result property="number" column="number" typeHandler="com.graduate.platform.researchworkers.util.TestTypeHandler"/>
</resultMap>
<!--查询-->
<select id="select" resultMap="testMap" >
select * from test where id=#{id}
</select>
<!--添加-->
<insert id="insert">
insert into test (name,number) values(#{test.name},#{test.number,typeHandler=com.graduate.platform.researchworkers.util.TestTypeHandler})
</insert>
插入测试
@Test
public void insertTest(){
List<Integer> number=new ArrayList<>();
number.add(1);
number.add(2);
number.add(3);
TestBean bean=new TestBean();
bean.setName("无糖");
bean.setNumber(number);
int i =baseInfoMapper.insert(bean);
}
结果
查询测试
@Test
public void selectTest(){
TestBean bean=baseInfoMapper.select(2);
}