使用MyBatis进行简易开发

使用MyBatis进行简易开发

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录(MyBatis是一个优秀的ORM框架)

1.创建Maven工程

注意:先安装好maven
然后在Eclipse里配置好maven
maven仓库:
https://mvnrepository.com

创建好的maven工程图如下所示]
创建好的maven工程图如上所示

2.导入jar包

打开上面给的maven仓库的网址,从上面搜索你想要的jar包,配置到pom.xml文件中

我配置的是
1.junit的jar包 4.12版本
2.log4j的jar包 :1.2.16版本
3.MySQL的jdbc连接jar包 5.1.41版本
mysql-connector-java
4.MyBatis的jar包 3.3.1版本

<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>com.yckj</groupId>
  <artifactId>java_MyBatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>java_MyBatis</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>

	   	<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/log4j/log4j -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.41</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.1</version>
		</dependency>
	</dependencies>
</project>

上面用的是Eclipase,如果是IDEA的话还需要加上以下代码

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

3.编写MyBatis的全局配置文件及数据库配置文件

这两个文件都放在src目录下

3.1 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>
  <!-- 引用数据库配置文件 -->
  <properties resource="db.properties"></properties>
  <environments default="development">
   <!-- 配置环境,id是唯一的,development表示开发环境 -->
    <environment id="development">
    <!-- 事务管理,默认是JDBC -->
      <transactionManager type="JDBC"/>
       <!-- 配置数据源 -->
      <dataSource type="POOLED">
      <!-- name是db.properties的属性名,values是值 ,这里的name和value需要一样,并且要和之前的db.properties的属性名相对应-->
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
  <!-- 配置映射文件,在mybatis-config.xml中配置映射文件 -->
  <!-- 这块的地址是你所要映射文件的地址 -->
    <mapper resource="com/yckj/java_MyBatis/ClassMapper.xml"/>
  </mappers>
</configuration>
3.2 db.properties

这块的properties配置文件主要就是为了获取数据库的连接

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/info?useSSL=false
username = ****
password = *********

最后的结果图如下所示

在这里插入图片描述

4.编写ORM映射类POJO

这块的字段要和你表中的字段相一致

@AllArgsConstructor // 所有参数构造方法
@NoArgsConstructor  //无参构造方法
@Data  //数据的注解会自动提供所有属性的get和set方法,及equals和hashCode方法等
public class Class1 implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Integer cno;
	private String cname;
	private String cteacher;
}
5. 编写ClassMapper接口(增删改查)
public interface ClassMapper {
	
	/**
	 * 添加班级
	 * @param class1
	 * @return
	 */
	int insert(Class1 class1) ;
	
	/**
	 * 修改班级
	 * @param class1
	 * @return
	 */
	int update(Class1 class1) ;
	
	/**
	 * 通过班号删除班级
	 * @param cno
	 * @return
	 */
	int deleteByCno(int cno);
	
	/**
	 * 通过班号查询班级信息
	 * @param cmo
	 * @return
	 */
	Class1 selectByCno(int cno);
	
	/**
	 * 查询所有班级信息
	 * @return
	 */
	List<Class1> selectAll();
	
}
6.编写ClassMapper.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">

<!-- namespace的值写对应的接口ClassMapper的全限定名(包名+类名) -->
<mapper namespace="com.yckj.java_MyBatis.ClassMapper">
	<!-- select是查询标签,表示写入查询语句 -->
	<!-- id必须和ClassMapper里的方法名相同,唯一的id,所以方法不能重载
		parameterType:表示selectById方法的输入参数的数据类型
		resultType:表示selectById方法的输出参数返回值的数据类型(如果没有定义别名,使用全限定名)
		注意:sql语句中的#{0}表示第一个参数,如果方法的参数只有一个或者几个参数的数据类型都相同,可以使用#{0},#{1},表示第一第二个参数
		如果参数有多个,但是参数类型都不相同,就需要在方法参数前使用@parm注解,比如@parm("id")
	 -->
	 
	<select id="selectByCno" parameterType="int"
		resultType="com.yckj.java_MyBatis.Class1">
		SELECT * FROM CLASS1 WHERE CNO=#{0};
	</select>
	
	<!-- 查询出的结果集如果是list集合,resultType的返回结果参照单挑记录数据类型 -->
	<select id="selectAll" resultType="com.yckj.java_MyBatis.Class1">
        SELECT * FROM CLASS1;
    </select>
    
    <!-- 增删改不能设置resultType属性值 -->
    <!-- 添加数据 
              如果parameterType参数值是一个实体类,那么values后面设置值就和POJO的属性名一样,
             当属性名和数据表的字段名全部一样,就能够映射成功,如果只有部分属性名和字段名相同,那么内部会创建对象,相同的能够映射成功,
             但是不相同的值就会映射不成功,如果全部不相同,就不会创建对象,都映射不成功,会报错   
    -->
    <insert id="insert" parameterType="com.yckj.java_MyBatis.Class1">
    INSERT INTO CLASS1 VALUES(#{cno},#{cname},#{cteacher})
    </insert>
    
    <delete id="deleteByCno" parameterType="int" >
        DELETE FROM class1 WHERE cno=#{0};
    </delete>
    
    <update id="update"  parameterType="com.yckj.java_MyBatis.Class1">
        UPDATE class1 SET cname=#{cname},cteacher=#{cteacher} WHERE cno=#{cno};
    </update>
</mapper>
7.测试代码

注意:动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。

public class ClassMapperTest {
	private Logger logger = Logger.getLogger(this.getClass());

	SqlSession sqlsession = null;
	InputStream inputStream = null;
	SqlSessionFactory sqlSessionFactory = null;
	

	/**
	 * 单元测试前执行,一般用于读取配置文件或者需要先执行的代码
	 */
	@Before
	public void begin() {
		String resource = "mybatis-config.xml";

		try {
			// 1.读取全局配置文件mybatis-config.xml内容
			inputStream = Resources.getResourceAsStream(resource);
			// 2.创建SqlSessionFactory对象
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			// 3.创建SqlSession会话对象,用于数据库CRUD操作
			sqlsession = sqlSessionFactory.openSession();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/**
	 * 单元测试后执行,一般用于关闭资源或者后执行的代码
	 */
	@After
	public void close() {
		if (sqlsession != null) {
			sqlsession.close();
		}
		if (inputStream != null) {
			try {
				inputStream.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 通过cno查询班级信息测试
	 */
	@Test
	public void testSelectByCno() {
		Class1 class1 =  sqlsession.selectOne(ClassMapper.class.getName()+".selectByCno", 1001);
		logger.debug(class1);
	}

	/**
	 * 查询所有班级信息测试
	 */
	@Test
	public void testSelectAll() {
		List<Class1> list = sqlsession.selectList(ClassMapper.class.getName()+".selectAll");
		for (Class1 class1 : list) {
			logger.debug(class1);
		}
	}
	
	/**
	 * 添加测试
	 */
	@Test
	public void testInsert() {
		Class1 class1 = new Class1();
		class1.setCno(1003);
		class1.setCname("C#");
		class1.setCteacher("wang");
		
		int res = sqlsession.insert(ClassMapper.class.getName() + ".insert", class1);
		if(res > 0) {
	    	// 提交事务,默认是手动提交
	    	sqlsession.commit();
	    	logger.debug("添加成功");
	    }else {
	    	sqlsession.rollback();
	    	logger.debug("添加失败");
	    }
	}
	
	/**
	 * 通过id删除测试
	 */
	@Test
	   public void testDeleteById() {
		    int res = sqlsession.delete(ClassMapper.class.getName()+".deleteByCno", 1003);
		    if(res > 0) {
		    	// 提交事务,默认是手动提交
		    	sqlsession.commit();
		    	logger.debug("删除成功");
		    }else {
		    	sqlsession.rollback();
		    	logger.debug("删除失败");
		    }
		    
	   }
	
	 /**
	    * 测试修改
	    */
	   @Test
	   public void testUpdate() {
		   Class1 class1 = new Class1();
			class1.setCno(1002);
			class1.setCname("C#");
			class1.setCteacher("wang");
		   int res = sqlsession.update(ClassMapper.class.getName()+".update", class1);
		   if(res > 0) {
		    	// 提交事务,默认是手动提交
		    	sqlsession.commit();
		    	logger.debug("修改成功");
		    }else {
		    	sqlsession.rollback();
		    	logger.debug("修改失败");
		    }
	   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值