SSM——MyBatis(1)——第一个MyBatisDemo(CURD)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jinxlzc/article/details/81430967

自学笔记,如有错误请指出,我虚心改正

环境说明:Windows10、MyEclipse2016ci、jdk1.8、MySQL5.7、Tomcat9.0


第一次说MyBatis只是完成从JDBC到MyBatis过渡,直观地展示MyBatis的实现,之后会说MyBatis如何一步一步完成甚至和Spring整合,在此之前可以回顾一下JDBC(https://blog.csdn.net/jinxlzc/article/details/83690134)

回顾完毕之后来看我们的Mybatis,创建一个名为MybatisDemo的web项目,项目的结构如下:


数据库

我使用的是MySQL数据库,在数据库软件中创建mybatistest库在该库中创建student表,该表的结构如下:

需要注意的是我这里使用的MyISAM数据库引擎,部分引擎不兼容Mybatis,具体原因我还不知道,查了很多博客与资料也没有解释,知道的朋友可以评论告诉我


外部包

该项目需要两个外部包

第一个是数据库连接包 mysql-connector-java-5.0.8-bin.jar,即在使用JDBC时我们用到的包,因为我使用的数据库是MySQL,该包在MySQL官网就能找到下载链接(https://dev.mysql.com/downloads/connector/j/),这里我使用的是5.0.8版本的

第二个是mybatis-3.4.2.jar,这里我用的是Mybatis的jar包而非mybatis和Spring整合jar包,现在Mybatis的资源托管在GitHub上,下载连接(https://github.com/mybatis/mybatis-3/releases

将这这两个外部包导入项目前期准备就基本完成


mysql.properties

mysql.properties是外部配置文件,里面保存有数据库的基本配置信息,包括数据库的驱动、数据库的url路径、数据库的用户名和密码,均以键值对形式保存,里面内容需根据自己的实际情况进行配置

该文件需要自行在src文件夹下创建新文件然后命名为mysql.properties,该文件源码如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/mybatistest?useUnicode\=true&characterEncoding\=utf8
jdbc.username=root
jdbc.password=root

pojo包

src下创建pojo包,该包保存有对应表结构的pojo类,还有与每个pojo类对应并保存了动态SQL的XML文件

以我数据库中的student表为例,在pojo包下创建Student.java和收Student.xml,在Student.java填入各种对应数据库结构封装属性和set、get方法,在Student.xml保存各种对应增删改查操作的动态SQL并起别名方便之后调用

Student.java代码如下:

package com.lzc.pojo;  
 
public class Student   
{  
    private int id;  
    private String name;
    public Student()
    {
    	//保留空参构造,因为下面有一个非空参构造则空参构造器不会自动生成,
    	//但实际会用到,使用在这里我们手动创建一个空参构造器
    }
    public Student(String name,int id)
    {
    	this.name=name;
    	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;  
    }  
}  

Student.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 通常设置成pojo包名  
         在后续调用sql语句的时候 会使用到 -->  
    <mapper namespace="com.lzc.pojo">  
    <!-- 这条语句中 用id:listStudent进行标示 供后续代码调用  
            resultType表示的返回一个关联Student类的数据  
            在这里本来应该使用的是com.tzy.pojo.Student  
            但是在之前的mybatis-configuration.xml中定义了  
            typeAliases别名 所以可以直接使用Student-->  
            <!--查所有-->
        <select id="listStudent" resultType="Student">  
            select * from  student   
        </select>  
          <!--增-->
         <insert id="addStudent" parameterType="Student" >  
            insert into student  (id,name) values (#{id},#{name})     
        </insert>  
           <!--删-->
        <delete id="deleteStudent" parameterType="Student" >  
            delete from student   where id= #{id}     
        </delete>  
           <!--查-->
        <select id="getStudent" parameterType="_int" resultType="Student">  
            select * from   student  where id= #{id}      
        </select>  
  			 <!--改-->
        <update id="updateStudent" parameterType="Student" >  
            update student set name=#{name} where id=#{id}      
        </update>  
    </mapper>  

mybatis-configuration.xml

mybatis-configuration.xml是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>
	<!-- 引入外部配置文件 -->
	<properties resource="mysql.properties">
	</properties>
    
    <typeAliases>
    <!-- 定义别名 -->
    <!-- 针对单个别名定义type:类型的路径  alias:别名 -->
    <typeAlias type="com.lzc.pojo.Student" alias="Student"/>
    <!-- 下面一行package name 作用为批量定义别名 指定一个包名 mybatis会自动扫描这个
    包中的pojo类 自动定义别名 别名就是类名(首字母大小写均可) -->
      <package name="com.lzc.pojo"/>
    </typeAliases>
    
   <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理 事务控制交给mybatis -->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池 由mybatis管理 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
      	  		<property name="url" value="${jdbc.url}" />
     		  	<property name="username" value="${jdbc.username}" />
        		<property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 加载映射文件 -->
    <!-- resource方法 一次加载一个映射文件  注意路径和xml文件-->
    <mappers>
        <mapper resource="com/lzc/pojo/Student.xml"/>
    </mappers>
</configuration>

test包

在src下创建test包用于对增删改查的测试,在该包下创建测试类TestMybatis.java,第一步要配置好Mybatis的基本信息并获取会话,TestMybatis.java具体代码如下:

package com.lzc.test;

import java.io.IOException;  
import java.io.InputStream;  
import java.util.List;  
   
import org.apache.ibatis.io.Resources;  
import org.apache.ibatis.session.SqlSession;  
import org.apache.ibatis.session.SqlSessionFactory;  
import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
   
import com.lzc.pojo.Student;  
   
public class TestMybatis {  
   
    public static void main(String[] args) throws IOException {  
        //mybatis配置文件  
        String resource = "mybatis-configuration.xml";  
        //得到配置文件流  
        InputStream inputStream = Resources.getResourceAsStream(resource);  
        //创建会话工厂 传入mybatis的配置文件信息  
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
        SqlSession session=sqlSessionFactory.openSession();  
        
        //填入
        //CURD
        //代码
        //区域

        }  
    }  
}  

查所有

根据SQL(  select * from  student )查找的结果集是整张表的内容,使用list接收并用for语句将其全部输出,为了方便观察之后增删改查操作,我在下面所有增删改查操作之后都会添加如下代码:

 System.out.println("当前数据库student表内容如下");
 List<Student> cs=session.selectList("listStudent");  
        for (Student a : cs) {  
            System.out.println(a.getName()+"   "+a.getId());  
        }  

该操作会将表内当前所有内容输出,目前数据库为空:

运行该段代码结果如下:


根据配置文件与SQL,需要向session提供含有增加条目的id和name的Student对象,填入代码如下:

        Student st1=new Student("李泽辰",1);
        Student st2=new Student("周杰伦",2);
        Student st3=new Student("陈奕迅",3);
        Student st4=new Student("邓紫棋",4);
        Student st5=new Student("林宥嘉",5);
        session.insert("addStudent",st1 );
        session.insert("addStudent",st2 );
        session.insert("addStudent",st3 );
        session.insert("addStudent",st4 );
        session.insert("addStudent",st5 );

运行结果如下:

当前数据库状态:


根据配置文件与SQL,需要向session提供含有删除条目的id的Student对象,以删除周杰伦为例,填入代码如下:

Student st=new Student();
        st.setId(2);
        session.delete("deleteStudent", st);

运行结果如下:

当前数据库状态:


根据配置文件与SQL,需要向session提供含有修改条目的id和修改的新name的Student对象,以把陈奕迅改名为张学友为例填入代码如下:

  Student st=new Student("张学友",3);
       session.update("updateStudent", st);

运行结果如下:

当前数据库状态:


根据配置文件与SQL,需要向session提供含有查询条目的id的Student对象,以查询id为4和5为例,填入代码如下:

        Student st1=new Student();
        Student st2=new Student();
        st1.setId(4);	
        st1=session.selectOne("getStudent", st1);
        System.out.println(st1.getName()+"   "+st1.getId());  
        st2.setId(5);
        st2=session.selectOne("getStudent", st2);
        System.out.println(st2.getName()+"   "+st2.getId());  

运行结果如下:

猜你喜欢

转载自blog.csdn.net/jinxlzc/article/details/81430967