发表于: 2020-04-27 15:27:37
1 1387
MyBatis将sql写在UserMapper里。
mybatis-config.xml
configuration根标签
mapper namespace可以随便起,但如果使用动态代理就要一样,可以直接跳到UserDao class。
<mapper namespace="dao.UserDao" >
把数据库中的列定义成java代码中的属性,并实现驼峰转换:
<result column="name" property="name" jdbcType="VARCHAR" />
junit中基本注解:
- @BeforeClass – 表示在类中的任意public static void方法执行之前执行
- @AfterClass – 表示在类中的任意public static void方法执行之后执行
- @Before – 表示在任意使用@Test注解标注的public void方法执行之前执行
- @After – 表示在任意使用@Test注解标注的public void方法执行之后执行
- @Test – 使用该注解标注的public void方法会表示为一个测试方法
参考:https://www.cnblogs.com/hezhiyao/p/9440277.html
UserDaoTest.java (juint)
1.不使用动态代理,直接使用有参构造
userDao = new UserDaoImpl(sqlSession);
传到UserDao class里
public UserDaoImpl(SqlSession sqlSession){
this.sqlSession = sqlSession;
}
2.使用动态代理---把userDao实例化出来,之后就可以使用比如userDao的add方法
userDao = sqlSession.getMapper(UserDao.class);
到mybatis-config.xml
<mapper resource="UserMapper.xml"/>
1.不使用动态代理,直接使用有参构造
单独运行/直接全部运行UserDaoTest.java的addUser
发现没有输出且显示no test cases found:于是pom.xml,重装juint4.12;
commit addUser后记录中出现了新增记录-“小”
addUser中的函数参数:
useGeneratedKey:是否返回主键
keyProperty:返回key的属性
parameterType:入参类型,在mybatis-config.xml中改pojo.User别名为User后就可以只写User,可跳转
<insert id="addUser" parameterType="pojo.User" useGeneratedKeys="true" keyProperty="id">
1.#{}预编译的方式preparedStatement,使用占位符替换,防止sql注入2.${}普通的statement,字符串直接拼接,不可以防止sql注入
#{name,jdbcType=VARCHAR}
报错:元素类型为 "mapper" 的内容必须匹配 "(cache-ref|cache|resultMap*|parameterMap*|sql*|insert*|update*|delete*|selec
---忘记comment注释导致
deleteUser运行:
updateUser:在userDaoImpl漏写id就报nullpointer错
public User selectObject(Long id){
return sqlSession.selectOne("dao.UserDao.selectObject", id);
}
余下3个juint testcases都通过了:
2.使用动态代理
把整个UserDaoImpl comment掉,在UserDaoTest。java中:
//使用动态代理
userDao = sqlSession.getMapper(UserDao.class);
Testcases也可以正常运行:
下一篇日报:
sqlsession,juint背景, spring, IOC
评论