开发MyBatis入门程序(Elipse版本和IDEA版本)

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发MyBatis入门程序(Elipse版本和IDEA版本)相关的知识,希望对你有一定的参考价值。

开发MyBatis入门程序

MyBatis本是Apache的一个开源项目ibatis,2010年这个项目由Apache Software Foundation迁移到Google Code,并改名为MyBatis.
MyBatis是一个基于Java的持久性框架,MyBatis提供的持久性框架包括SQL Maps和Data Access Objects,它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或者注解用于配置和原始映射,将接口和Java的POJOs映射成数据库的记录。
目前,Java的持久层框架产品有很多,常见的有Hibernate和MyBatis,MyBatis是一个半自动的映射框架,因为MyBatis需要手动匹配POJO,SQL和关系映射,而Hibernate是一个全面映射的框架,只需要提供POJO和映射关系即可。MyBatis是一个小巧,方便,高效,简单,直接,半自动化的持久层框架,HIbernate是一个强大,方便,高效,复杂,间接,全自动的持久层框架。
MyBatis的工作原理
(1)读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息
(2)加载映射文件:映射文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在MyBatis配置文件myBatis-config.xml中加载,每个文件对应数据库中的一张表
(3)构造会话工厂:通过MyBatis的运行环境等配置信息构建会话工厂SqlSessionFactory
(4)创建会话对象:由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法
(5)Executor执行器:MyBatis底层定义一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态的生成需要执行的SQL语句
(6)MappedStatement对象:在Executor接口执行方法有一个MappedStatement类型的参数对象,该参数是对映射信息的封装,主要存储要映射的SQL语句的id,参数等信息。
(7)输入参数映射:输入参数类型可以是Map,List等集合类型,也可以是基本数据类型和POJO类型
(8)输出参数映射:输出结果类型可以是Map,List等集合,也可以是基本数据类型和POJO类型
1-使用Eclipse开发MyBatis入门程序
1.创建Web应用,并添加相关jar包,在Eclipse中创建名为ch6的web应用,将MyBatis的核心JAR包,依赖jar包,以及数据库的驱动jar包一起赋值到/WEB-INF/lib目录下
在这里插入图片描述
2.创建日志文件,MyBatis默认使用log4j输出日志信息,如果开发者需要查看控制台输出的SQL语句,那么需要在classpath路径下配置其日志文件,在ch6应用的src目录下创建log4j.properties文件

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3.在mysql数据库中创建数据库spring,并在该数据库中常见用户表user,字符串的编码选择utf8的编码格式。在该表中录入四行数据。
在这里插入图片描述

4.创建持久化类,在src目录下创建一个名为com.mybatis.po的包,在该包中创建持久化类MyUser,在类中声明的属性与数据表user中的一致。

public class MyUser {
	private Integer uid ; //主键
	private String uname ;
	private String usex ;
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUsex() {
		return usex;
	}
	public void setUsex(String usex) {
		this.usex = usex;
	}
	
	public String toString() {
		return "User " + " uid = " + uid + " uname = " + uname + " usex = " + usex ;
	}
}

5.创建映射文件,在src目录下创建一个名为com.mybatis.mapper的包,在该包中创建映射文件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="com.mybatis.mapper.UserMapper">
<!-- 根据uid查询一个用户的信息 --> 
    <select id="selectUserById" parameterType = "Integer"
            resultType="com.mybatis.po.MyUser">
       select * from user where uid = #{uid}
</select>
    <!--查询所有用户信息-->
    <select id = "selectAllUser" resultType="com.mybatis.po.MyUser">
        select * from user
    </select>

    <!--添加一个用户-->
    <insert id = "addUser" parameterType = "com.mybatis.po.MyUser">
        insert into user (uid, uname, usex) values (#{uid},#{uname},#{usex})
    </insert>

    <!--修改一个用户-->
    <update id = "updateUser" parameterType = "com.mybatis.po.MyUser">
        update user set uname = #{uname}, usex = #{usex} where uid = #{uid}
    </update>

    <!--删除一个用户-->
    <delete id = "deleteUser" parameterType = "Integer">
        delete from user where uid = #{uid}
    </delete>

</mapper>

6.创建MyBatis的配置文件,在src目录下创建MyBatis的核心配置文件mybatis-cofig.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="development">
        <environment id = "development">
            <!--使用JDBC进行事务管理-->
            <transactionManager type = "JDBC"/>
            <dataSource type = "POOLED">
                <!--MySQL数据库驱动-->
                <property name = "driver" value = "com.mysql.jdbc.Driver"/>
                <!--连接数据库的url-->
                <property name = "url" value = "jdbc:mysql://localhost:3306/spring?characterEncoding=utf8"/>
                <property name = "username" value = "root"/>
                <property name = "password" value = "123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--映射文件的位置-->
        <mapper resource = "com/mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

7.创建测试类,在src目录下创建一个名为com.mybatis.test的包,在该包中创建MyBatisTest测试类,在测试类中首先使用输入流读取配置文件,然后根据配置文件信息构建SqlSessionFactory对象,然后根据SqlSessionFactory对象创建SqlSession对象,并对SqlSession对象的方法进行数据库操作

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.mybatis.po.MyUser;

public class MyBatisTest {
	public static void main(String[] args) {
		try {
			//读取配置文件mybatis-config.xml
			InputStream config = Resources.getResourceAsStream("mybatis-config.xml") ;
			//根据配置文件构建SqlSessionFactory
			SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config) ;
			//根据SqlSessionFactory构建SqlSession
			SqlSession ss = ssf.openSession();
			//SqlSession执行映射文件中定义的SQL,并返回映射结果	
			//删除一个用户	ss.delete("com.mybatis.mapper.UserMapper.deleteUser",4) ;
			
			//查询一个用户
			MyUser myUser = ss.selectOne("com.mybatis.mapper.UserMapper.selectUserById",1) ;
			System.out.println(myUser);
			//添加一个用户
			MyUser addmu = new MyUser() ;
			addmu.setUid(4); 
			addmu.setUname("王国栋") ;
			addmu.setUsex("男") ;		ss.insert("com.mybatis.mapper.UserMapper.addUser",addmu) ;	
			//修改一个用户
			MyUser updatemu = new MyUser() ;
			updatemu.setUid(1);
			updatemu.setUname("张珂珂") ;
			updatemu.setUsex("男");
			ss.update("com.mybatis.mapper.UserMapper.updateUser",updatemu) ;

			//查询所有用户
			List<MyUser> listMu = ss.selectList("com.mybatis.mapper.UserMapper.selectAllUser") ;
			for(MyUser m : listMu) {
				System.out.println(m);
			}
			//提交事务
			ss.commit() ;
			ss.close();
		}catch(IOException e) {
			e.printStackTrace() ;
		}
	}
}

8.控制台输出结果
在这里插入图片描述
9.数据库结果
在这里插入图片描述
2-使用IDEA开发MyBatis入门程序
1.创建一个名为ch6的maven项目,该项目的目录结构如下:
在这里插入图片描述
2.在pom.xml配置文件所需的jar包,并提示编译器src/main/java目录下有xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>ch6</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

<dependencies>
    <!--MyBatis的jar包配置-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>

   <!-- mysql驱动包的配置 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.30</version>
</dependency>

</dependencies>
    <!-- 配置以下信息,是src/main/java目录下有xml文件-->
<build>
<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
</resources>
</build>
</project>

3.pom.xml文件配置完成后,需要Reimport一下,将这些jar自动导入。

在这里插入图片描述
4.创建日志文件,MyBatis默认使用log4j输出日志信息,如果开发者需要查看控制台输出的SQL语句,那么需要在classpath路径下配置其日志文件,在ch6应用的src/main/resources目录下创建log4j.properties文件

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

5.在MySQL数据库中创建数据库spring,并在该数据库中常见用户表user,字符串的编码选择utf8的编码格式。在该表中录入四行数据。
在这里插入图片描述
6.在src/main/java目录下,创建一个名为com.mybatis.po的包,在该包中创建持久化类MyUser,在该类中声明的属性与数据表user中的属性一致

public class MyUser {
    private Integer uid ; //主键
    private String uname ;
    private String usex ;
    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public String getUsex() {
        return usex;
    }
    public void setUsex(String usex) {
        this.usex = usex;
    }

    public String toString() {
        return "User " + " uid = " + uid + " uname = " + uname + " usex = " + usex ;
    }
}

7.在src/main/java目录下,创建一个名为com.mybatis.mapper包,在该包中创建映射文件UserMapper.xml
在下述映射文件中,mapper元素是配置文件的根元素,它包含了namespqce属性,该属性值通常设置为“包名+SQL映射文件名”,指定了唯一的命名空间,子元素select,insert,update,delete中的信息是用于执行查询,插入,修改,删除操作的配置,在定义的SQL语句中#{}表示一个占位符,#{uid}表示该占位符接收的参数的名称为uid

<?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="com.mybatis.mapper.UserMapper">
    <!-- 根据uid查询一个用户的信息 -->
    <select id="selectUserById" parameterType = "Integer"
            resultType="com.mybatis.po.MyUser">
       select * from user where uid = #{uid}
</select>
    <!--查询所有用户信息-->
    <select id = "selectAllUser" resultType="com.mybatis.po.MyUser">
        select * from user
    </select>

    <!--添加一个用户-->
    <insert id = "addUser" parameterType = "com.mybatis.po.MyUser">
        insert into user (uid, uname, usex) values (#{uid},#{uname},#{usex})
    </insert>

    <!--修改一个用户-->
    <update id = "updateUser" parameterType = "com.mybatis.po.MyUser">
        update user set uname = #{uname}, usex = #{usex} where uid = #{uid}
    </update>

    <!--删除一个用户-->
    <delete id = "deleteUser" parameterType = "Integer">
        delete from user where uid = #{uid}
    </delete>
</mapper>

8.在resource目录下创建MyBatis的核心配置文件mybatis-config.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="development">
        <environment id = "development">
            <!--使用JDBC进行事务管理-->
            <transactionManager type = "JDBC"/>
            <dataSource type = "POOLED">
                <!--MySQL数据库驱动-->
                <property name = "driver" value = "com.mysql.jdbc.Driver"/>
                <!--连接数据库的url-->
                <property name = "url" value = "jdbc:mysql://localhost:3306/spring?characterEncoding=utf8"/>
                <property name = "username" value = "root"/>
                <property name = "password" value = "123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--映射文件的位置-->
        <mapper resource = "com/mybatis/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

9.在src/main/java目录下创建com.mybatis.test包,在该包中创建测试类MyBatisTest

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.mybatis.po.MyUser;

public class MyBatisTest {
    public static void main(String[] args) {
        try {
            //读取配置文件mybatis-config.xml
            InputStream config = Resources.getResourceAsStream("mybatis-config.xml") ;
            //根据配置文件构建SqlSessionFactory
            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config) ;
            //根据SqlSessionFactory构建SqlSession
            SqlSession ss = ssf.openSession();
            //SqlSession执行映射文件中定义的SQL,并返回映射结果

            //删除一个用户
            ss.delete("com.mybatis.mapper.UserMapper.deleteUser",4) ;

            //查询一个用户
            MyUser myUser = ss.selectOne("com.mybatis.mapper.UserMapper.selectUserById",1) ;
            System.out.println(myUser);
            //添加一个用户
            MyUser addmu = new MyUser() ;
            addmu.setUid(4);
            addmu.setUname("王国栋") ;
            addmu.setUsex("男") ;
            ss.insert("com.mybatis.mapper.UserMapper.addUser",addmu) ;


            //修改一个用户
            MyUser updatemu = new MyUser() ;
            updatemu.setUid(1);
            updatemu.setUname("张珂珂") ;
            updatemu.setUsex("男");
            ss.update("com.mybatis.mapper.UserMapper.updateUser",updatemu) ;



            //查询所有用户
            List<MyUser> listMu = ss.selectList("com.mybatis.mapper.UserMapper.selectAllUser") ;
            for(MyUser m : listMu) {
                System.out.println(m);
            }
            //提交事务
            ss.commit() ;
            ss.close();
        }catch(IOException e) {
            e.printStackTrace() ;
        }
    }
}

10.控制台输出的测试结果如下:
在这里插入图片描述

以上是关于开发MyBatis入门程序(Elipse版本和IDEA版本)的主要内容,如果未能解决你的问题,请参考以下文章

跟着老杜学MyBatis+第2天+MyBatis入门程序

跟着老杜学MyBatis+第2天+MyBatis入门程序

跟着老杜学MyBatis+第2天+MyBatis入门程序

从零开始认识并操纵Mybatis

[android开发篇][android studio 和elipse都需要的流程 android sdk的安装

mybatis框架入门