Mybatis如何配置

详情网址:http://www.mybatis.org/mybatis-3/zh/index.html;

Mybatis-3.4.4 jar 包下载网址:https://github.com/mybatis/mybatis-3/releases

eclipse中propertise插件的安装教程:https://my.oschina.net/u/3422045/blog/902165

  • 一、Mybatis简介 

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

通俗来说,首先Mybatis是一种框架,javabean类将数据库的记录映射成java对象,Mybatis自动取得对象的结果集(避免 object.id = xx;object.name = xx)。

Mybatis使用普通的xml文件构造,需将 mybatis-x.x.x.jar 文件置于 classpath 中,如果使用maven(项目管理软件)进行构造,jar包不需要放在项目里,只需联网,从maven仓库下载即可。阿里maven仓库网址:http://maven.aliyun.com/nexus/content/groups/public/;

  • 二、Mybatis应用目录结构

/my_application
  /bin
  /devlib
  /lib                <-- MyBatis *.jar文件在这里。
  /src
    /org/myapp/
      /action
      /data           <-- MyBatis配置文件在这里, 包括映射器类, XML配置, XML映射文件。
        /mybatis-config.xml
        /BlogMapper.java
        /BlogMapper.xml
      /model
      /service
      /view
    /properties       <-- 在你XML中配置的属性 文件在这里。
  /test
    /org/myapp/
      /action
      /data
      /model
      /service
      /view
    /properties
  /web
    /WEB-INF
      /web.xml

此次项目的目录结构如下:                                  

211505_Iube_3422045.png

  •  三、Mybatis配置及使用

以Mysql数据库atm数据库下 a_card表为例,进行阐述,a_card表结构为:

 

110818_E2bd_3422045.png

1.导入jar包 

项目lib文件夹下加载数据库驱动mysql-connector-java-5.1.42-bin.jar和Mybatis的mybatis-3.4.4.jar文件并建立路径。

2. 配置主文件mybatis-config.xml

需要主要配置property,typeAlias,environment,mapper等。

<?xml version="1.0" encoding="UTF-8" ?>
<!--要注意 XML 头部的声明,用来验证 XML 文档正确性。  -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties resource="config.properties" />
	<typeAliases>
		<typeAlias alias="Card" type="com.dayuan.data.Card" />
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>	
	<mappers>
		<package name="com.dayuan.data" />
	</mappers>
</configuration>

property配置所依赖的文件:

<properties resource="config.properties" />

config.properties文件的内容是:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/atm?useSSL=true
username=root
password=123123

property元素引用jdbc.properties文件中的属性值, #{username}是指需要动态配置的变量。  

typeAlias定义mybatis操作的类的简化名称  ,在Mybatis主配置文件中定义的假名在mybatis使用的全局生效。

<typeAliases>
  <typeAlias alias="Card" type="com.dayuan.data.Card" />
 </typeAliases> 

environment 元素体中包含了事务管理和连接池的配置。

mappermappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息),指定 SQL语句编写 的位置,例如指定某个.xml文件:

<mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>

3. 创建与表格相对应的三个文件(实体类(javabean)、mapper.java(映射类)、mapper.xml(映射文件))

  • ①.与表a_card相对应的Card实体类

数据库字段与类中变量相对应

package com.dayuan.data;

public class Card {
	private Integer id;
	private String cardNo;
	private String password;
	private Integer money;
	private Integer persionId;
	private Integer version;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getCardNo() {
		return cardNo;
	}
	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getMoney() {
		return money;
	}
	public void setMoney(Integer money) {
		this.money = money;
	}
	public Integer getPersionId() {
		return persionId;
	}
	public void setPersionId(Integer persionId) {
		this.persionId = persionId;
	}
	public Integer getVersion() {
		return version;
	}
	public void setVersion(Integer version) {
		this.version = version;
	}
		
}
  •  ②定义xml映射文件CardMapper.xml

文件中最基本的有两个部分,一是 CardMapper.xml关联到哪个接口(一个表格一个接口),二是文件执行的Sql语句如何定义。

第一个问题通过文件的namespace元素定义:

<mapper namespace="com.dayuan.data.CardMapper">

 第二个问题sql语句:

<select id="selectCardById2" parameterType="int" resultType="Card">
  select id, card_no as cardNo, password from a_card where id = #{id}
 </select>

 在命名空间“com.dayuan.data.CardMapper”中定义了一个名为“selectCardById2”的映射语句,这样它就允许你使用指定的完全限定名“com.dayuan.data.CardMapper.selectCardById2”来调用映射语句,前提是使用正确的路径。

语句中,Card类并不存在,但是可以使用是因为在mybatis-config.xml文件中定义了别名

<typeAlias alias="Card" type="com.dayuan.data.Card" />注意路径

  •  ③定义映射类CardMapper接口

 

package com.dayuan.data;

public interface CardMapper {
 
 public Card selectCardById2(int param);
}

sql语句和接口中的方法相对应, id="selectCardById2"即为方法名,parameterType="int" 方法中传入参数类型,resultType="Card"方法返回值类型,where id = #{id}方法传入id的值。

4.创建测试类test.java

public class Test {

 public static void main(String[] args) {
  SqlSession session = null;
  try {

 //1.  用配置文件构建SqlSessionFactory
   String resource = "mybatis-config.xml";
   InputStream inputStream = Resources.getResourceAsStream(resource);
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
     .build(inputStream);

 //2.  利用SqlSessionFactory打开一个和数据库的SqlSession,并设置为自动提交,默认是开启事务不会自动提交

   session = sqlSessionFactory.openSession(true);

//3. 利用这个SqlSession获取要使用的mapper接口

   CardMapper mapper = session.getMapper(CardMapper.class);

 //4. 使用mapper接口和数据库交互,运行mapper.xml文件中的SQL语句

   Card card = mapper.selectCardById2(1);

   System.out.println(card.getCardNo());
  } catch (Exception e) {
   e.printStackTrace();
  } finally {

 //5. 关闭SqlSession


   if (session != null) {
    session.close();
   }

  }

 }

}

  • 四、完整版的CardMapper.xml和接口类CardMapper.java 及测试类

 CardMapper.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.dayuan.data.CardMapper">
	<select id="selectCardById" parameterType="int" resultType="hashmap">
		select * from a_card where id = #{id}
	</select>

	<select id="selectCardById2" parameterType="int" resultType="Card">
		select id, card_no as cardNo, password from a_card where id = #{id}
	</select>

	<!-- 动态sql实例 -->
	<select id="selectCardById3" parameterType="hashmap" resultType="Card">
		select id, card_no as cardNo, password from a_card
		where 1=1
		<if test="id != null">
			and id = #{id}
		</if>
		<if test="cardNo != null">
			and card_no = #{cardNo}
		</if>
	</select>

	<!-- 动态sql实例 -->
	<select id="selectCardById4" parameterType="hashmap" resultType="Card">
		select id, card_no as cardNo, password from a_card
		where 1=1
		<choose>
			<when test="id != null">
				and id = #{id}
			</when>
			<when test="cardNo != null">
				and card_no = #{cardNo}
			</when>
			<otherwise></otherwise>
		</choose>
	</select>

	<!-- 动态sql实例 -->
	<select id="selectCardById5" parameterType="hashmap" resultType="Card">
		select id, card_no as cardNo, password from a_card
		<where>
			<!-- <trim prefix="WHERE" prefixOverrides="AND |OR "> -->
			<if test="id != null">
				and id = #{id}
			</if>
			<if test="cardNo != null">
				and card_no = #{cardNo}
			</if>
			<!-- </trim> -->
		</where>
	</select>

	<!-- 动态sql实例 -->
	<select id="selectCardById6" parameterType="list" resultType="Card">
		select id, card_no as cardNo, password from a_card
		where id in
		<foreach item="item" index="index" collection="list" open="("
			separator="," close=")">
			#{item}
		</foreach>
	</select>

	<insert id="insertCard" parameterType="Card" keyProperty="id"
		useGeneratedKeys="true">
		insert into a_card
		(card_no,password,money,persion_id) values
		(#{cardNo},#{password},#{money},#{persionId})
	</insert>

	<update id="updateCardById" parameterType="Card">
		update a_card set
		password=#{password} where id=#{id}
	</update>

	<delete id="deleteCardById" parameterType="int">
		delete from a_card
		where id=#{id}
	</delete>
</mapper>

映射接口类CardMapper.java 

package com.dayuan.data;

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

public interface CardMapper {
	public Map<String,Object> selectCardById(int param);
	
	public Card selectCardById2(int param);
	
	public List<Card> selectCardById3(Map<String,Object> map);
	
	public List<Card> selectCardById5(Map<String,Object> map);
	
	public List<Card> selectCardById6(List<Integer> list);
	
	public int insertCard(Card card);
	
	public int updateCardById(Card card);
	
	public int deleteCardById(int id);
}

测试类test.java

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.dayuan.data.Card;
import com.dayuan.data.CardMapper;

public class Test {

	public static void main(String[] args) {
		SqlSession session = null;
		try {
			String resource = "mybatis-config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inputStream);

			session = sqlSessionFactory.openSession(true);

			// Card card = (Card)
			// session.selectOne("com.dayuan.selectCardById2",
			// 1);
			// System.out.println(card.getCardNo());
			// System.out.println(card.getPassword());

			// Map<String, Object> map = session.selectOne(
			// "com.dayuan.selectCardById", 1);
			// System.out.println(map.get("card_no"));
			// System.out.println(map.get("money"));

			// CardMapper mapper = session.getMapper(CardMapper.class);
			// Card card = mapper.selectCardById2(1);
			// System.out.println(card.getCardNo());
			// System.out.println(card.getPassword());

			// CardMapper mapper = session.getMapper(CardMapper.class);
			// Card card = new Card();
			// card.setCardNo("67899999");
			// card.setMoney(5000);
			// card.setPassword("tgghjkl");
			// card.setPersionId(1);
			// int c = mapper.insertCard(card);
			// System.out.println("影响行数:"+c);
			// System.out.println("自增主键:"+card.getId());

			// CardMapper mapper = session.getMapper(CardMapper.class);
			// Card card = new Card();
			// card.setId(11);
			// card.setPassword("666666");
			// int c = mapper.updateCardById(card);
			// System.out.println("影响行数:"+c);

			// CardMapper mapper = session.getMapper(CardMapper.class);
			// int c = mapper.deleteCardById(9);
			// System.out.println("影响行数:"+c);

			// 动态sql(重点)
//			CardMapper mapper = session.getMapper(CardMapper.class);
//			Map<String,Object> paramMap = new HashMap();
			paramMap.put("id", 1);
//			paramMap.put("cardNo", "6225666666666666");
//			List<Card> list = mapper.selectCardById3(paramMap);
//			System.out.println(list.size());
			
//			CardMapper mapper = session.getMapper(CardMapper.class);
//			Map<String,Object> paramMap = new HashMap();
//			paramMap.put("id", 1);
//			paramMap.put("cardNo", "6225666666666666");
//			List<Card> list = mapper.selectCardById5(paramMap);
//			System.out.println(list.size());
			
			CardMapper mapper = session.getMapper(CardMapper.class);
			List<Integer> list = new ArrayList<Integer>();
			list.add(1);
			list.add(2);
			List<Card> list2 = mapper.selectCardById6(list);
			System.out.println(list2.size());
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}

		}

	}

}

 

转载于:https://my.oschina.net/u/3422045/blog/900704

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值