发表于: 2019-12-16 14:38:58
1 912
今天完成的事情:
1.修改昨天的代码,成功完成了使用mybatis实现增删改查
1)User实体类
package com.mybatisCRUD.beans;
public class User {
private int id;
private String name;
private String pwd;
public User(){};
public User(String name,String pwd){
this.name=name;
this.pwd=pwd;
}
public User(String name,String pwd,int id){
this.name=name;
this.pwd=pwd;
this.id=id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
}
}
2)UserMapper接口
package com.mybatisCRUD.mapper;
import com.mybatisCRUD.beans.User;
import java.util.List;
public interface UserMapper {
public int insertUser(User user) throws Exception;
public int updateUser(User user) throws Exception;
public int deleteUser(int id) throws Exception;
public User selectUserById(int id) throws Exception;
public List<User> selectAllUser() throws Exception;
}
3)UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatisCRUD.mapper.UserMapper">
<insert id="insertUser" parameterType="com.mybatisCRUD.beans.User">
insert into user (name, pwd)
values (#{name}, #{pwd})
</insert>
<update id="updateUser" parameterType="com.mybatisCRUD.beans.User">
update user
set name=#{name},
pwd=#{pwd}
where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete
from user
where id = #{id}
</delete>
<select id="selectUserById" parameterType="int" resultType="com.mybatisCRUD.beans.User">
select *
from user
where id = #{id}
</select>
<select id="selectAllUser" parameterType="com.mybatisCRUD.beans.User" resultType="com.mybatisCRUD.beans.User">
select *
from user
</select>
</mapper>
4)创建SqlSession的工具类DBTools
import java.io.Reader;
public class DBTools {
public static SqlSessionFactory sessionFactory;
static{
try {
//使用MyBatis提供的Resources类加载mybatis的配置文件
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//构建sqlSession的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
//创建能执行映射文件中sql的sqlSession
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
5)测试类UserServiceTest
package com.mybatisCRUD.service;
import com.mybatisCRUD.beans.User;
import com.mybatisCRUD.mapper.UserMapper;
import com.mybatisCRUD.tools.DBTools;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
import java.util.List;
public class UserServiceTest {
@Test
//添加操作
public void insertUser() throws Exception {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User("多多", "qq22222");
try {
mapper.insertUser(user);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
@Test
//删除操作
public void deleteUser() throws Exception {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
mapper.deleteUser(7);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
@Test
//修改操作
public void updateUser() throws Exception {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User("tyty", "eeeeee",4);
try {
mapper.updateUser(user);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
@Test
//查询操作1:由id查询
public void selectUserById() throws Exception {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
//这里用到User类的无参构造方法创建对象,User user=new User();
User user = mapper.selectUserById(2);
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
@Test
//查询操作2:查询全部
public void selectAllUser() throws Exception {
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
try {
List<User> user = mapper.selectAllUser();
System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
}
6)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>
<!-- 引入外部配置文件 -->
<properties resource="db.properties"></properties>
<!-- 配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!--mybatis.xml里注册UserMapper.xml文件-->
<mappers>
<mapper resource="com/mybatisCRUD/mapper/UserMapper.xml"/>
</mappers>
</configuration>
7)db.properties
username=root
password=19980710
url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8
driver=com.mysql.cj.jdbc.Driver
明天计划的事情:接着完成下面的任务。
遇到的问题:
1.昨天错误的改进
1)修改UserMapper.xml
昨天的代码中使用了resultMap标签,这个标签的作用是当数据库中属性名与实体类中的属性名不一样时,使用的标签。
用这个标签之后在sql操作的标签中也要用到,导致出现了空指针异常。
所以我将这个标签删除掉,又把下面的代码改进了一下,就可以跑通了。
2)修改操作的添加
找到的例子里没有写修改操作的测试类,只在接口里的update方法中传递了两个参数,User user和int id。我就思考怎么用这个接口写他的测试代码,怎么写xml,没有想通。主要是xml文件不知道怎么用他的方法写。
于是用了自己想出的办法:在实体类中定义一个传递三个参数的构造器,name,pwd,id。接口里只有一个参数User user。在测试中就能直接传递这三个参数。xml文件的代码也就很好写了。
收获:
1.在之后的编程中尽量把数据库中的属性名和代码中的属性名写成相同的。
2.super
3.super的使用 :构造器
1)在子类中显式的使用”super(形参列表)”的方式,调用父类中声明的指定的构造器
2)”super(形参列表)”的使用,必须声明在子类构造的首行
3)在类的构造器中,针对于”this(形参列表)”或“super(形参列表)”只能二选·一,不可以同时使用
4)在构造器首行,没有显式的声明”this(形参列表)”或“super(形参列表)”,则默认调用的是父类中的空参构造器
5)在类的多个构造器中,至少有一个类的构造器使用了“super(形参列表)”,调用父类构造器
4.Jdbc、JdbcTemplate、mybatis的区别
jdbcTemplate 是spring对 jdbc操作数据库进行的封装,使得开发者可以直接在java文件中编写sql,无需配置xml文件。
mybatis提供的映射方式,半自动的生成sql,大部分还是需要程序员编写sql,sql和java编码分开,功能边界清晰。
5.Mybatis为什么不用写接口的实现类
mybatis通过JDK的动态代理方式,在启动加载配置文件时,根据配置mapper的xml去生成Dao的实现。
6.为什么要提供无参的构造器
因为我们在实例对象的时候,都要不断的向上(父类)回溯,回溯到Object(),要想顺利的回溯到Object,就必须给指定一条通路,如果没有,就用默认的 super()。
所以在类中声明一个无参构造函数可以避免其子类在实例化对象时出错。
7.log4j
1 )Log4j是什么?
log4j是Apache的一个开放源代码的项目,通过使用log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
2 )记录日志信息的作用?
(1)监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;
(2)跟踪代码运行时轨迹,作为日后审计的依据;
(3)担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
使用Log4j框架的作用通俗的解释:
能够控制日志信息想往哪里打就往哪里打,比如:控制台、文件、邮箱、数据库等等。
能够控制日志信息想怎么打就怎么打,比如:我想要打印时间、程序的名称、程序的方法名、程序的行号、线程的名称等等。
能够控制日志信息想打什么打什么,不想打的就不打,日志信息是分级别的,有时候我只想看错误的信息或者警告的信息,有时候我想看到所有的信息我想调试程序等等。
评论