MyBatis学习笔记-初识

1、MyBatis原理图

     其中,对象就是所谓的封装的实体类;映射就是要对数据库进行相关操作的代码对应到数据库中,避免了平时编写调用数据库的一些“又臭又长”的代码;数据库不言而喻。

2、创建Java工程,并且创建相应的包

     本次创建的是Maven项目。所有包如下:

3、导入MyBatis所需的jar包

   如果创建的是Maven项目的话,可以在pom.xml中配置如下:

<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.MyBatisTest</groupId>
  <artifactId>MyBatisTest</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

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

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

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- 添加Servlet -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>3.1.0</version>
	    <scope>provided</scope>
	</dependency>
  
  <!-- 添加Mysql驱动 -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>5.1.47</version>
	</dependency>
	<!-- Gson -->
	<dependency>
	    <groupId>com.google.code.gson</groupId>
	    <artifactId>gson</artifactId>
	    <version>2.8.2</version>
	</dependency>
	<!--commons-fileupload -->
	<dependency>
	    <groupId>commons-fileupload</groupId>
	    <artifactId>commons-fileupload</artifactId>
	    <version>1.3.1</version>
	</dependency>
	<dependency>
	    <groupId>org.hamcrest</groupId>
	    <artifactId>hamcrest-core</artifactId>
	    <version>1.3</version>
	    <scope>test</scope>
	</dependency>
	<!-- log4j-->
	<dependency>
	    <groupId>org.apache.logging.log4j</groupId>
	    <artifactId>log4j-core</artifactId>
	    <version>2.3</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
	<dependency>
	    <groupId>org.apache.logging.log4j</groupId>
	    <artifactId>log4j-slf4j-impl</artifactId>
	    <version>2.3</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-api</artifactId>
	    <version>1.7.25</version>
	</dependency>
	
	<!-- MyBatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.4.6</version>
	</dependency>
	
	<!-- jstl -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>
   <!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
</dependency>
  </dependencies>
</project>

4、添加MyBatis的配置文件(mybatis.cfg.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="database.properties"></properties>
	<typeAliases>
		<package name="com.MyBatisTest.Bean"/>
	</typeAliases>
	<!-- 配置mybatis运行环境 -->
     <environments default="cybatis">
        <environment id="cybatis">
            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
            <transactionManager type="JDBC" />
            
            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}" />
                <property name="url" value="${url}" />
                <property name="username" value="${user}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 映射文件路径配置 -->
    <mappers>
        <!-- 告知映射文件方式1,一个一个的配置
        <mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
        <!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
        <package name="com/MyBatisTest/Mapper"/>
    </mappers>
</configuration>

5、创建实体类(本文中为Student.java)

package com.MyBatisTest.Bean;

public class Student {
	private int ID;
	private String Name;
	private int Age;
	
	public Student() {}
	public Student(int ID,String Name,int Age) {
		this.ID=ID;
		this.Name=Name;
		this.Age=Age;
	}
	public int getID() {
		return ID;
	}
	public void setID(int iD) {
		ID = iD;
	}
	public String getName() {
		return Name;
	}
	public void setName(String name) {
		Name = name;
	}
	public int getAge() {
		return Age;
	}
	public void setAge(int age) {
		Age = age;
	}
	
	
}	

6、创建数据库增删改查方法接口(StidentMapper.java)

package com.MyBatisTest.Mapper;

import java.util.List;
import java.util.Map;

import com.MyBatisTest.Bean.Student;


public interface StudentMapper {
	/**
     * 插入信息
           */
    public int insertStudent(Student Student) throws Exception;
    /**
     * 更新信息1
     */
    public int updateStudent (Student Student,int id) throws Exception;
    /**
     * 更新信息2
     */
    public int updateStudent2 (Student student) throws Exception;
    /**
     * 更新信息3
     */
    public int updateStudent3 (Map map) throws Exception;
     /**
      *删除信息
      */
    public int deleteStudent(int id) throws Exception;
    /**
     * 按条件选择信息
     */
    public Student selectStudentById(int id) throws Exception;
     /**
      * 显示所有信息
      */
    public List<Student> selectAllStudent() throws Exception;
 

}

7、编写MyBatis的映射文件(StudentMapper.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.MyBatisTest.Mapper.StudentMapper">
	
	<!-- 添加用户 -->
	<insert id="insertStudent" useGeneratedKeys="true" keyProperty="id">
		insert into student(Name,Age) values(#{Name},#{Age})
	</insert>
	
	<!-- 修改用户 -->
	<update id="updateStudent2" >
		  update student set
		    Name = #{Name},
		    Age = #{Age}
		  where ID = #{id}
		</update>
	<!-- 修改用户 -->
	<update id="updateStudent3" parameterType="hashmap">
		  update student set
		    Name = #{Name},
		    Age = #{Age}
		  where ID = #{id}
		</update>
		<!-- 删除用户 -->
	<delete id="deleteStudent">
	  delete from student whereID = #{id}
	</delete>
	<!-- 查询所有用户 -->
	<select id="selectAllStudent" resultType="Student" >
   		 select * from student 
 	 </select>
 	 <!-- 根据ID查询用户 -->
	<select id="selectStudentById" parameterType="int" resultType="Student">
   		 select * from student where ID=#{id}
 	 </select>
</mapper>

8、当以上所有文件都创建完成时,可以用JUint来进行单元测试运行

package com.MyBatisTest.MyBatisTest;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.MyBatisTest.Bean.Student;
import com.MyBatisTest.Mapper.StudentMapper;
import com.MyBatisTest.utils.DBTools;

public class MyBatisTest {
	@Test
	public void test01() {
		SqlSession session=DBTools.getSession();
		StudentMapper mapper=session.getMapper(StudentMapper.class);
		Student stu=new Student();
		stu.setName("testman0409");
		stu.setAge(999);
		try {
			mapper.insertStudent(stu);
			session.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void test02() {
		SqlSession session=DBTools.getSession();
		StudentMapper mapper=session.getMapper(StudentMapper.class);
		try {
			List<Student> list=mapper.selectAllStudent();
			System.out.println(list.size());
			for (Student student : list) {
				System.out.println(student.getName());
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void test03() {
		SqlSession session=DBTools.getSession();
		StudentMapper mapper=session.getMapper(StudentMapper.class);
		try {
			Student student=mapper.selectStudentById(1);
			System.out.println(student.getName());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void test04() {
		SqlSession session=DBTools.getSession();
		StudentMapper mapper=session.getMapper(StudentMapper.class);
		try {
			Student stu=new Student();
			stu.setID(1);
			stu.setName("testman0409");
			stu.setAge(999);
			int result=mapper.updateStudent2(stu);
			System.out.println(result);
			session.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void test05() {
		SqlSession session=DBTools.getSession();
		StudentMapper mapper=session.getMapper(StudentMapper.class);
		try {
			Map stu=new HashMap();
			stu.put("id", 9);
			stu.put("uname", "lisi_new2");
			int result=mapper.updateStudent3(stu);
			System.out.println(result);
			
			session.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Test
	public void test06() {
		SqlSession session=DBTools.getSession();
		StudentMapper mapper=session.getMapper(StudentMapper.class);
		try {
		
			int result=mapper.deleteStudent(29);
			System.out.println(result);
			
			session.commit();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

    当运行test03方法时,结果如下:

9、附:本次数据库的Student表设计

总结

     以上所述就是MyBatis框架的入门知识,通过MyBatis框架可以完全替换JDBC,使得编码变的更加的简洁。而且MyBatis还是“半自动”的,可以直接编写所需要的SQL语句,让使用更加的灵活。

猜你喜欢

转载自blog.csdn.net/qq_41172982/article/details/89160758