发表于: 2018-04-05 23:26:31
1 1103
编辑日报内容...
一、今天完成的事情
使用mybatis进行简单的CRUD结构图
创建实体类
package com.ptteng.model;
public class User {
private int user_id;
private String user_name;
private int user_age;
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getUser_age() {
return user_age;
}
public void setUser_age(int user_age) {
this.user_age = user_age;
}
@Override
public String toString() {
return "User{" +
"user_id=" + user_id +
", user_name='" + user_name + '\'' +
", user_age=" + user_age +
'}';
}
}
配置mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载单个映射文件-->
<mapper resource="mapping/UserMapping.xml"/>
</mappers>
</configuration>
这里网上教程里的批量加载映射文件,不知道为什么一直无法加载,提示找不到UserMapper.xml
批量加载
<package name="classpath:mapping"/>
映射文件UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapping.UserMapping">
<select id="queryUserById" parameterType="String" resultType="com.ptteng.model.User">
SELECT*FROM student WHERE user_id=#{user_id} //根据id查询
</select>
<insert id="insertUsers" parameterType="com.ptteng.model.User"> //添加
INSERT INTO student(user_name,user_age)VALUES (#{user_name},#{user_age})
</insert>
<delete id="deleteUsers" parameterType="int"> //删除
DELETE FROM student WHERE user_id=#{user_id}
</delete>
<update id="updateUsers" parameterType="com.ptteng.model.User"> //更改
UPDATE student SET user_name =#{user_name},user_age=#{user_age} WHERE user_id=#{user_id}
</update>
</mapper>
配置日志
输出日志可以查看到sql的语句,方便调试程序
log4j.rootLogger=DEBUG,Console
代表root节点整个工程下所有输出日志的地方配置的输出的级别和输出的位置。
log4j.logger.org.apache.ibatis=ERROR
代表特定包下的特定级别。log4j把日志分为ALL、TRACE&(跟踪)、DEBUG(调试)、INFO(信息)、WARNING(警告)、ERROR(错误)、FITAL(致命)、OFF等几个级别,级别依次升高。级别高的Level会屏蔽级别低的信息。
log4j.appender.Console=org.apache.log4j.ConsoleAppender
代表配置控制台的类。
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
代表配置布局。
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
代表自定义输出内容的格式。其中ConversionPattern设置输出格式的参数解释如下:
%d 产生日志的时间
%t 产生日志所处的线程名称
%-5p 输出日志的级别,将占5位字符,不足5位用空格填补,-指的是在右边补齐,没有则在左边
%c 输出日志的包以及类的全名
%m 附加的信息
%n 换行
log4j.logger.org.apache=INFO
代表为特定的包(org.apache)配置特定的级别INFO,这样就把上面总的级别DEBUG掩盖了,这样一来,这个包下的DEBUG信息就不会输出,就不会影响我们想要看的信息。
测试类
package com.ptteng;
import com.ptteng.model.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.InputStream;
public class UserTest {
String resource = "mybatis.xml";//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = UserTest.class.getClassLoader().getResourceAsStream(resource);//构建sqlSession的工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession();
/**
* 映射sql的标识字符串,
* com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper标签的namespace属性的值,
* getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
@Test
public void QueryUserById() {
String startment = "mapping.UserMapping.queryUserById";//映射sql的标识字符串
//执行查询返回一个唯一user对象的sql
User queryUserById = sqlSession.selectOne(startment, "1");
System.out.println(queryUserById.toString());
sqlSession.commit();
}
@Test
public void InsertUsers() {
User user = new User();
user.setUser_name("bb");
user.setUser_age(22);
int result = sqlSession.insert("mapping.UserMapping.insertUsers", user);
sqlSession.commit();
}
@Test
public void DeleteUsers() {
int result = sqlSession.delete("mapping.UserMapping.deleteUsers", 1);
sqlSession.commit();
}
@Test
public void UpdateUsers() {
User user = new User();
user.setUser_name("dd");
user.setUser_age(44);
user.setUser_id(4);
int result = sqlSession.update("mapping.UserMapping.updateUsers",user);
sqlSession.commit();
}
}
运行结果
二、明天计划的事情:
学习Spring和Junit,进行单元测试,将前期的知识好好捋一遍
三、遇到的问题:
运行时说找不到UserMapping.xml
可是在mybatis.xml文件中,路径没有错误啊???
<mappers>
<!--加载单个映射文件-->
<mapper resource="com/ptteng/mapping/UserMapping.xml"/>
<!--批量加载-->
<!--<package name="com.ptteng.mapping"/>-->
</mappers>
网上说法:IDEA的Maven是不会编译src的java目录的xml文件,所以在Mybatis的配置文件中找不到xml文件
解决方法:在POM中添加build。(然而,我的还是报错)
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
四、收获:
昨天师兄在日报里点评的问题,
1.为了项目层次清晰度考虑,建议mapper文件放在mapper接口一起。
mapper不放在resources中,没办法扫描到,这个还没解决
2.mysql配置文件 怎么用的日报记录,可以和配置文件放在一起,这样一看就懂。
已改
3.super关键词时什么意思,应该在什么时候使用?
我记得supper只在子类构造函数第一行使用,只调用一次。是指向父类的。
5.从对方的接口写法中,你能学到什么?
一个是集合,一个是抛异常,抛异常,具体是怎么用什么时候用还不是太明白
6.日志打印除了控制控制台输出以外,还有什么用法?
还可以查看sql语句的执行,便于后期程序的调试
7.测试类已经在方法名那一行使用了throws,在方法体中是否可以取消trycatch?
可以
8.在测试类中,你在catch块中使用的session.rollback语句,是否可以正常运行?
可以
9.获取mapper.xml文件的路径,最好的方式是哪一种?如果需要不断移动mapper.xml呢?
感觉应该是这一种把?单个映射<mapper resource="com/ptteng/mapping/UserMapping.xml"/>
不断移动mapper.xml的话?IDEA会给自动匹配新路径?
进度:
任务开始时间:2018年3月1日
预计demo时间:2018年4月20日
是否延期:
延期理由:
评论