发表于: 2018-03-21 19:26:35

1 478


今日完成

1.改用junit测试方法,编写单元测试的代码。

2.补全增删改查,运行起来。增删改查需要熟悉透彻(还有很多不清楚的地方,整的有点乱)。

3.尽可能回顾之前用到的知识体系,学着查看日志,并转成Debug模式,练习调试。


1.先使用junit测试:(实际上junit测试就相当于我们自己写的测试类,以后测试都使用junit)

public void testMain(){
Reader reader = null;
   String readerxml = "mybatis/mybatis-config.xml";
   try {
reader = Resources.getResourceAsReader(readerxml);
   } catch (IOException e) {
e.printStackTrace();
   }
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
   SqlSession session = sqlSessionFactory.openSession();
   UserDao su = session.getMapper(UserDao.class);
   User u = new User();
   u.setId(4);
   User ceshi = su.selectById(u);
   System.out.print("\n需要查的名字 = 李雷雷,测试出来的名字:= " + ceshi.getName() + "\n");
   assertEquals("李雷雷",ceshi.getName());

   session.close();
}

测试结果:


2.增删改查(这里只是插入数据)

这里代码以插入数据为例:

稍微整理了目录:

User.xml

<mapper namespace="com.java.model.User">

<insert id="insertUser" parameterType="User" useGeneratedKeys="true"  keyProperty="id" >
       INSERT INTO jnshu_user(id,create_at,update_at,name,age,sex,pro,brother) values (#{id},#{create_at},#{update_at},#{name},#{age},#{sex},#{pro},#{brother})
</insert>

   <!--<update id="updateUser" parameterType="com.java.model.User" >-->
       <!--Update jnshu_ser SET name=#{name},age=#{age},six=#{six},pro=#{pro},brother=#{brother} WHEN id=#{id}-->
   <!--</update>-->

   <!--&lt;!&ndash;resultType="int"返回的一个值类型 复杂对象用resultMap&ndash;&gt;-->
   <delete id="delectUser" parameterType="int" >
       DELECT FROM jnshu_user WHERE id=#{id}
</delete>
   <!--<select id="findAllUSer" parameterType="model.user" resultMap="allUserList ">-->
       <!--SELECT * FROM jnshu_user-->
   <!--</select>-->

</mapper>

spring.xml配置(其它略,这个地方有点不清楚)

<!--不需要mybatis-config配置文件-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="dataSource" ref="dataSource"/>
   <property name="mapperLocations" value="classpath*:Mapper/*.xml"/>
   <property name="typeAliasesPackage" value="com.java.dao,com.java.model"/>

</bean>
<bean id="slqSessionTemlpate" class="org.mybatis.spring.SqlSessionTemplate ">
   <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="UserDao" class="com.java.serviceimpl.UserDaoImpl">
   <property name="sqlSessionTemlpate" ref="slqSessionTemlpate"/>
</bean>

mapperLocations:导入mapper,批量导入。classpath*:Mapper/*.xml

typeAliasesPackage:包地址


UserDaoImpl

package com.java.serviceimpl;

import com.java.dao.UserDao;
import com.java.model.User;
import org.mybatis.spring.SqlSessionTemplate;

import java.util.List;
public class UserDaoImpl implements UserDao {
private SqlSessionTemplate sqlSessionTemlpate;

   public User selectById(User user) {
System.out.print("selectById\n");
       return (User)sqlSessionTemlpate.selectOne("com.java.model.User.getUser",user);

   }
public void updateUser(User user) {
this.sqlSessionTemlpate.update("com.java.model.User.updateUser",user);
   }

public void delectUSer(int id) {
sqlSessionTemlpate.delete("com.java.model.User.delectUser",id);
   }

public void insertUser(User user) {
       System.out.print("interUser\n"+"user的名字:"+ user.getName() + "\n" );
       this.sqlSessionTemlpate.insert("com.java.model.User.insertUser",user);
   }


public List<User> findAllUser() {
return null;
   }

public void setSqlSessionTemlpate(SqlSessionTemplate sqlSessionTemlpate) {
this.sqlSessionTemlpate = sqlSessionTemlpate;
   }

public SqlSessionTemplate getSqlSessionTemlpate() {
return sqlSessionTemlpate;
   }
}

spring整合mybatis仍然使用sqlSessionTemplate使用映射sql语句。


测试:

    public void testInsertUser(){

       ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
       UserDao userdao = (UserDao)context.getBean("UserDao");

       User u = new User();
//        u.setId(5);
       u.setName("岗山");
       u.setAge(36);
       u.setCreate_at(20130504);
       u.setUpdate_at(20140101);
       u.setSex(1);
       u.setPro("啊啊,苍天饶过谁!");
       u.setBrother("胡海平");
//        System.out.print("执行完:User赋值\n");
//        System.out.print("执行完:insertUser();\n");
       userdao.insertUser(u);
//        userdao.delectUser(4);
//        System.out.print();
       System.out.print("上一步:testMain()\n");

   }

顺序:读取xml——获取bean——执行语句——结束关闭

执行结果(看到的执行成功的时候查看数据库已经是第27条了,但是之前测试没有执行成功过,不知道为什么就到id27了(id自增)):

中间很多次报错,但是数据却插进去了,可以清除的看到自增的id都快30条了,但是之前是运行报错的,没有成功过。


明天计划的事情


1.继续写xml配置和整合,就不信不能一次性配正确。还有数据连接池的概念,配置数据池(c3p0/Proxool/51CTO/DHCP等)

2.可以的话就买服务器,试着部署数据库。


问题与收获

有两个错误印象最深:

Mapped Statements collection already contains value for xxx.xxx.xxx(映射语句)

Mapped Statements collection does not contain value for xxx.xxx.xxx(映射语句)

翻来覆去的出现

要么就是已经包含了,要么就是不包含。就是因为载入/不载入mybatis-config.xml,载入就报已经包括了,注释掉就报不包含。

还有是跟命名空间namespace="com.java.model.User"有关。

现在它的指向仍然是实体类,这个要根据使用的方法去配。之前写的配置指向的是SuperUser接口。

这里是使用impl写出了接口的里的映射。脑子里仍然没有一个清晰的印象。

但是知道几个必须的。必须要有数据库连接,必须有session,必须载入bean,当然,配置里的对应关系必须要正确。

因为测试的时候写了会报错,不写也报错。

最开始的时候是报空指针错误,然后是命名空间错误,接着是找不到映射,然后又是找不到com.java.model.User类或者其他包,最后又是插入值为空。只能一个个找原因。

算是练习了找bug的能力。还好最后成功了。

JDBC/springJdbcTemplate/mybatis/spring-mybatis都写了一遍,但是认识仍然不深刻。









返回列表 返回列表
评论

    分享到