Mybatis入门及简单实例

MyBatis 简单入门

MyBatis是一流的持久性框架,支持自定义SQL,存储过程
和高级映射。 MyBatis消除了几乎所有的JDBC代码和手动设置
参数和结果检索。 MyBatis可以使用简单的XML或注释进行配置
并将图元,Map接口和Java POJO(普通的旧Java对象)映射到数据库记录.

运行环境:

MyBatis + Mariadb + Eclipse on Windows.

1. 下载Mariadb Windows 版本,不需要License, free, 不需要注册
https://downloads.mariadb.org/, 安装 HeidiSQL Client 端
2. mybatis-3.5.3, 从. https://github.com/mybatis/mybatis-3/releases 下载最新版本。
3. mariadb driver - 从https://downloads.mariadb.com/Connectors/java/connector-java-2.5.1/ 下载

MyBatis 的mapper 有两种实现方式, 一种是xml file, 另一种为Mapper java file 加上Select, Update Insert 等SQL注解。 以下以下以xml 为例。

配置:

  1. 生成一个java Project. 并把mariadb driver jar 包和mybatis jar 包放在Reference Library 里,(Build Path --> add to Build Path).

  2. 生成mybatis config xml file.

<?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>
		<typeAlias alias="Person" type="com.batis.model.Person" />
	</typeAliases>

	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="org.mariadb.jdbc.Driver" />
				<property name="url" value="jdbc:mariadb://localhost:3306/mysql" />
				<property name="username" value="root" />
				<property name="password" value="newsys" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<mapper resource="com/batis/config/PersonMapper.xml" />
	</mappers>
</configuration>

用typeAliases的目的是直接用alias Person来代替POJO 的绝对路径(如com.batis.model.Person 类)

  1. 生成 Mapper file.
<?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.batis.config.PersonMapper">


<resultMap type="Person" id="personmap">
	<id column="id" property="id" />
	<result column="name" property="name" />
	<result column="address" property="address" />
	<result column="birthday" property="birthday" />
</resultMap>

	<select id="selectAll" resultMap="personmap">
		select * from person
	</select>
	
	<select id="selectPerson" resultType="Person">
		select * from person where id = #{id}
	</select>

	<insert id="insert"  parameterType="map" useGeneratedKeys="true"  keyProperty="id">
		insert into person ( name, address, birthday) values (
		#{name}, #{address}, #{birthday}
		)
	</insert>
</mapper>

注意事项:

  1. insert 操作时如果primary key 自动增加(Auto Increamented ) , 需要设置parameterType=“map” useGeneratedKeys=“true” keyProperty=“id”, keyProperty 声明key column name.

POJO类:
需要getter和setter 以及带成员变量的构造函数

public class Person {
	public Person(int id, String name, String address, Date birthday) {
		super();
		this.id = id;
		this.name = name;
		this.address = address;
		this.birthday = birthday;
	}

	private int id;
	private String name;
	private String address;
	private Date birthday;

测试:

public class MybatisTest {

	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		String resource = "com/batis/config/MyBatisConfig.xml";
		InputStream inputStream = null;
		SqlSession session = null;
		
		Date birthday = new Date(25, 2, 7);
		Person p = new Person(2, "Tester", "China", birthday);
		System.out.println("p = " + p);
		try {
			inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			
			session = sqlSessionFactory.openSession();
			Person p1 = session.selectOne("com.batis.config.PersonMapper.selectPerson", 1);

			List<Object> list = session.selectList("com.batis.config.PersonMapper.selectAll");
			
		    for (Object obj :  list)
		    {
		    	System.out.println((Person)obj);
		    }
			int ret =  session.insert("com.batis.config.PersonMapper.insert", p);
			session.commit();


		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally
		{
			try {
				inputStream.close();
				session.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

这样就可以了。

相对于Hibernet,Mybatis 非常简单,也容易上手,可以快速开发。还有Dynamic SQL 这个最强大的功能, 可以处理复杂的SQL 组合。

发布了14 篇原创文章 · 获赞 0 · 访问量 298

猜你喜欢

转载自blog.csdn.net/weixin_43237071/article/details/103083733