发表于: 2020-10-11 22:59:30

1 1377


今天完成的事情:

遇到的问题:

整合Spring+Mybatis

创建数据表并导入数据



目录结构

导入applicationContext之前需要导入spring-context包

<!-- 导入spring-context-->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>5.2.9.RELEASE</version>
</dependency>

导入依赖包

<dependencies>

   <!-- 导入mybatis-->
   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.4.6</version>
   </dependency>

   <!-- 导入mybatis-spring-->
   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
       <version>2.0.5</version>
   </dependency>

   <!-- 导入spring-core-->
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-core</artifactId>
       <version>5.2.9.RELEASE</version>
   </dependency>

   <!-- 导入mysql-connector-java-->
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.31</version>
   </dependency>

   <!-- 导入junit-->
   <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.12</version>
       <scope>test</scope>
   </dependency>

   <!-- 导入spring-context-->
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>5.2.9.RELEASE</version>
   </dependency>

   <!-- 导入spring-jdbc-->
   <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-jdbc</artifactId>
       <version>5.2.9.RELEASE</version>
   </dependency>



</dependencies>

创建db.properties连接数据库信息

#mysql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///db4
user=root
password=wsj199599

创建student实体类

package com.jnshu.Pojo;

import java.sql.Date;

public class Student {
private int id;
   private String name;
   private int gender;
   private Date birthday;

   public Student(int id,String name,int gender,Date birthday){
this.id = id;
       this.name = name;
       this.gender = gender;
       this.birthday = birthday;
   }

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 int getGender() {
return gender;
   }

public void setGender(int gender) {
this.gender = gender;
   }

public Date getBirthday() {
return birthday;
   }

public void setBirthday(Date birthday) {
this.birthday = birthday;
   }

/**
    * @Override 的作用是:如果想重写父类的方法,比如toString()方法的话,
    * 在方法前面加上@Override 系统可以帮你检查方法的正确性。
    *
    *  toString 方法会返回一个以文本方式表示此对象的字符串。
    * @return
    */

   @Override
   public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender=" + gender +
", birthday=" + birthday +
'}';
   }
}

这里了解setter和getter方法的作用,还了解了@Override的作用   和   toString的方法的作用

setter和getter方法主要是为了调用封装的数据,保证数据的安全性。只可以读不能改写。

顺便了解一下封装

封装

  java是面向对象的语言,为了让类的内部数据不被随意的访问修改,我们会用访问修饰符对其被访问权限进行修饰。例如我们经常看见的实体类。里面的成员变量我们就是用private修饰符进行修饰,然后提供getter、setter方法,这样外部就不能直接访问该类的成员变量了,只能通过get、set方法访问。总的来说封装就是我们用权限修饰符private对其方法和成员变量进行修饰,不让外部随意访问。

Getter和Setter方法参考网址(https://blog.csdn.net/jason_lh1024/article/details/90900339)

创建StudentDao接口

package com.jnshu.Mapper;

import com.jnshu.Pojo.Student;

import java.util.List;

public interface StudentDao {
public int intsertStudent(Student student);
   public int deleteStudent(String name);
   public int updateStudent(Student student);
   public Student findStudentById(int id);
   public List<Student> findAllStudent();

}

写Spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

   <context:property-placeholder location="db.properties"/>

   <!-- 配置数据源 -->
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <!-- 数据库驱动,我这里使用的是Mysql数据库 -->
       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
       <!-- 数据库地址,这里也要注意一下编码,不然乱码可是很郁闷的哦! -->
       <property name="url" value="jdbc:mysql:///db4"/>
       <!-- 数据库的用户名和密码-->
       <property name="username" value="root"/>
       <property name="password" value="wsj199599"/>
   </bean>
   <!-- 指定数据源和配置文件路径 -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <!-- 自动扫描mapping.xml文件 -->
       <property name="configLocation" value="mybatis-config.xml"/>
       <property name="dataSource" ref="dataSource"/>
   </bean>
   <!-- DAO接口所在包名,Spring会自动查找其下的类,并将其定义为一个Spring Bean -->
   <bean id="studentDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
       <property name="mapperInterface" value="com.jnshu.Mapper.StudentDao"/>
       <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
   </bean>
</beans>

编写Mybatis的配置文件

<?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>
   <!-- 声明在该标签里面的信息是一个个的别名 -->
   <typeAliases>
       <!-- 声明要使用别名的对象(全路径)用java注解的话可以使用@Alias注解声明 -->
       <typeAlias type="com.jnshu.pojo.Student" alias="student"/>
   </typeAliases>
   <!-- 声明我们定义的一个个Mapper类,或者说是关联 -->
   <mappers>
       <!-- 声明Mapper的路径 -->
       <mapper resource="StudentDao.xml"/>
   </mappers>
</configuration>

编写Student的mapper映射文件

<?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对应一个dao -->
<mapper namespace="com.jnshu.Mapper.StudentDao">
   <!---->
   <insert id="insertStudent" parameterType="com.jnshu.Pojo.Student" >
      INSERT INTO student VALUES (#{id},#{name},#{gender},#{birthday},)
</insert>
   <!---->
   <delete id="deleteStudent" parameterType="String" >
      DELETE FROM student WHERE NAME =#{name}
</delete>
   <!---->
   <update id="updateStudent" parameterType="com.jnshu.Pojo.Student">
      UPDATE student SET weight=#{name}, WHERE ID=#{id}
</update>

   <resultMap id="Students"  type="com.jnshu.pojo.Student">
       <id property="id" column="id" javaType="java.lang.Long"/>
       <result property="id" column="id"  javaType="java.lang.String"/>
       <result property="name"  column="name" javaType="java.lang.Integer"/>
       <result property="gender" column="gender"  javaType="java.lang.Integer"/>
       <result property="birthday" column="birthday"  javaType="java.lang.String"/>
   </resultMap>
   <!--通过id查找-->
   <select id="findStudentById" parameterType="int" resultMap="com.jnshu.Pojo.Student">
      SELECT * from student where id=#{id}
</select>
   <!-- 封装List集合-->
   <select id="getAllStudent" resultMap="com.jnshu.Pojo.Student">
      select *  from student
</select>
</mapper>

创建实体类接口Student的实现类StudentImple

package com.jnshu.Pojo;


import com.jnshu.Mapper.StudentDao;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class StudentDaoImple extends SqlSessionDaoSupport implements StudentDao {

public int intsertStudent(Student student) {
return this.getSqlSession().insert("test.insertStudent",student);
   }


public int deleteStudent(String name) {
SqlSession sqlSession = this.getSqlSession();
       return sqlSession.delete("test.deleteStudent",name);
   }


public int updateStudent(Student student) {
return this.getSqlSession().update("test.updateStudent",student);
   }


public Student findStudentById(int id) {
return this.getSqlSession().selectOne("test.findStudentById",id);
   }


public List<Student> findAllStudent() {
return this.getSqlSession().selectList("test.findAll");
   }
}

编写测试类(暂时只写了一个)

import com.jnshu.Mapper.StudentDao;
import com.jnshu.Pojo.Student;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class StudentDaoImpleTest {
private ApplicationContext context;

   @Before
   public void setUp() throws Exception {
context = new ClassPathXmlApplicationContext("applicationContext.xml");
   }

@Test
   public void insertStudent() {
StudentDao studentDao = (StudentDao) context.getBean("student");
       Student student = new Student(1, "49.9", 21, "1997-12-11");
       studentDao.intsertStudent(student);
       System.out.println(student);
   }
}

出现报错




 

明天计划的事情:

了解mybatis,使用mybatis连接数据库




收获:对Spring+Mybatis,有了初步的认识。知道自己对封装,抽象方法,@Override,继承和接口,映射太多基础的概念不了解。基础知识太薄弱





返回列表 返回列表
评论

    分享到