发表于: 2017-12-28 22:21:28
1 650
今天完成的事情:
1、完成任务一验收标准中的除了CRUD的基本单元测试,加上根据学员名字,学号去查找报名贴的单元测试和Interface和ServiceImpl分开,把mybatis和jdbctemplate都重新按照标准做了一遍,这次真的是加深了理解,尤其是mybaits的,关于配置文件的
<!-- 插入 -->
<insert id="insert" parameterType="com.jnshu.domain.Student">
insert into student (name,type,number)values(#{name},#{type},#{number})
</insert>
<!-- 查找 -->
<select id="getStudentById" resultType="com.jnshu.domain.Student">
select name,type from student where id =#{id}
</select>
<select id="getStudentByName" resultType="com.jnshu.domain.Student">
select * from student where name like CONCAT(CONCAT('%', #{name}), '%')
</select>
<select id="getStudent" resultType="com.jnshu.domain.Student">
SELECT * FROM student
</select>
<!-- 删除 -->
<delete id="delete" parameterType="int" >
delete from student where id = #{id}
</delete>
<!-- 修改 -->
<update id="update" parameterType="com.jnshu.domain.Student" >
update student set name = #{name},type=#{type} where id = #{id}
</update>
附上这个过程中掌握的知识
1、sql的重用:定义一个sql片段,可在任何SQL语句中重用该片段
<sql id="personColumns"> name, sex, updateTime</sql>
<select id="selectPerson" parameterType="int" resultType="hashmap">
select id, <include refid="personColumns"/> from person where id =#{id};
</select>
2、javabean别名:不用每次写包路径
<!-- In Config XML file,定义 -->
<typeAlias type=”com.someapp.model.User” alias=”User”/>
<!-- In SQL Mapping XML file,使用 -->
<select id=”selectUsers” parameterType=”int” resultType=”User”>
select id, username, hashedPassword from some_table where id = #{id}
</select>
3、
a)SQL的别名
<select id=”selectUsers” parameterType=”int” resultType=”User”>
select user_id as "id", user_name as userName, hashed_password as hashedPassword from some_table where id = #{id}
</select>
这一个当我们建表按照报名格式时会有很多形参,可以用得到
b)定义外部的resultMap
<resultMap id="userResult" type="User">
<id property="id" column="_id" />
<result property="name" column="_name" />
<result property="password" column="_password" />
</resultMap>
<select id="selectUser" parameterType="int" resultMap="userResult">
select _id, _name, _password from _user where _id =#{id};
</select>
明天计划的事情:
1、整合mybatis和spring,打包
2、尝试debug模式,熟悉操作,看看step35-47
遇到的问题:
1、Result Maps collection does not contain value for java.lang.Integer解决方法
解决办法:1).检查mybatis的xml配置
2).在某处肯定有配错了的,如"resultMap" -->"resultType"
2、mybatis绑定错误
如果出现:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
一般的原因是Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称等能否对应上,需要比较细致的对比,我经常就是写错了一两个字母搞的很长时间找不到错误
按以下步骤一一执行:
1):检查xml文件所在的package名称是否和interface对应的package名称一一对应
2):检查xml文件的namespace是否和xml文件的package名称一一对应
3):检查函数名称能否对应上
4):去掉xml文件中的中文注释
5):随意在xml文件中加一个空格或者空行然后保存
3、返回 (多行)单列 数据
API:public < T> List< T> queryForList(String sql, Map<String, ?> paramMap, Class< T > elementType)
API:public < T> List< T> queryForList(String sql, SqlParameterSource paramSource, Class< T> elementType)
示例:List< String> namelist = template.queryForList("select name from student", new HashMap<>(), String.class);
public List<Student> getStudentByName(String Name) {
String sql = "select * from student where name like ?";
List<Student> students= this.jdbcTemplate.queryForList(sql, new HashMap<>(),String.class);
return students;
List< String> namelist = template.queryForList(sql, new HashMap<>(), String.class);
}
4、下图注释,如果不注释,就能修改成功,否则报错。
[main] DEBUG com.jnshu.dao.StudentDao.update - ==> Parameters: 哈哈11(String), slsl(String), null
[main] DEBUG com.jnshu.dao.StudentDao.update - <== Updates: 0
[main] DEBUG com.jnshu.dao.StudentDaoTest - 修改失败
问题 :觉得Student stu = dao.StudentById(14);多余,重复,想改
收 获:
如上,今天收获还是挺大的,对mybatis操作数据库有点数了
禅道地址:http://task.ptteng.com/zentao/my-task-assignedTo-id_desc-117-20-4.html
任务一step1-35能确定点了完成。。
评论