因为工作中所使用的开发框架都是ssh,很长时间没有使用ssh框架之外的框架,最近温习了一下mybatis,废话不多说,直接上实例。
1、首先建立java web项目
2、导入开发所需jar包,jar包可以去mybatis官网下载,mybatis官网jar包下载步骤
3、创建测试表,下面是我的表结构。
4、创建配置文件
jdbc配置文件:
##mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/world?useOldAliasMetadataBehavior=true&allowMultiQueries=true
jdbc.username=root
jdbc.password=mlnsoft
mybatis配置文件:
<?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="jdbc.properties"></properties>
<!-- 配置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="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
</configuration>
5、创建Javabean,接口文件和映射xml文件
City.java
package com.cp.myproject.bean;
import java.io.Serializable;
public class City implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String countryCode;
private String district;
private Integer population;
/**
* @return the id
*/
public Integer getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the countryCode
*/
public String getCountryCode() {
return countryCode;
}
/**
* @param countryCode the countryCode to set
*/
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
/**
* @return the population
*/
public Integer getPopulation() {
return population;
}
/**
* @param population the population to set
*/
public void setPopulation(Integer population) {
this.population = population;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "City [id=" + id + ", name=" + name + ", countryCode="
+ countryCode + ", distinct=" + district + ", population="
+ population + "]";
}
/**
* @return the district
*/
public String getDistrict() {
return district;
}
/**
* @param district the district to set
*/
public void setDistrict(String district) {
this.district = district;
}
}
CityMapper.java
package com.cp.myproject.mapper;
import java.util.List;
import com.cp.myproject.bean.City;
public interface CityMapper {
/**
* 增加
* @param city
* @return
*/
public int insert(City city);
/**
* 删除
* @param id
* @return
*/
public int delete (int id);
/**
* 更新
* @param city
* @param id
* @return
*/
public int update (City city);
/**
* 根据id查询
* @param id
* @return
*/
public City selectById(int id);
/**
* 查询所有的记录
* @return
*/
public List<City> findAll();
/**
* 更新或插入
* @param city
* @return
*/
// public int saveOrUpdate(City city);
}
CityMapper.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.cp.myproject.mapper.CityMapper">
<!-- 自定义返回结果集 -->
<resultMap id="cityMap" type="City">
<id property="id" column="ID" javaType="java.lang.Integer"></id>
<result property="name" column="Name"></result>
<result property="countryCode" column="CountryCode" ></result>
<result property="district" column="District" ></result>
<result property="population" column="Population" javaType="java.lang.Integer"></result>
</resultMap>
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->
<!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys
方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->
<!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值 -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into city (name,countryCode,district) values (#{name},#{countryCode},#{district})
</insert>
<update id="update" parameterType="com.cp.myproject.bean.City" >
update city
<set>
<if test="district != null">district=#{district},</if>
<if test="name != null">name=#{name},</if>
<if test="countryCode != null">countryCode=#{countryCode},</if>
<if test="population != null">population=#{population}</if>
</set>
where id = #{id}
</update>
<delete id="delete" parameterType="int">
delete from city where id=#{id}
</delete>
<select id="selectById" parameterType="int" resultMap="cityMap">
select * from city where id=#{id}
</select>
<select id="findAll" resultMap="cityMap">
select * from city
</select>
</mapper>
6、将mapper xml文件 在mybatis.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="jdbc.properties"></properties>
<!-- 为JAVA Bean起类别名 -->
<typeAliases >
<!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名
<typeAliase type="com.cp.myproject.bean.City" alias="City"/> -->
<!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
<package name="com.cp.myproject.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="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 告知映射文件方式1,一个一个的配置
<mapper resource="com/cp/myproject/mapper/CityMapper.xml"/>-->
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
<package name="com/cp/myproject/mapper"/>
</mappers>
</configuration>
7、工具类创建
package com.cp.myproject.DbTools;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class DbTools {
public static SqlSessionFactory sessionFactory;
static{
try {
//使用MyBatis提供的Resources类加载mybatis的配置文件
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//构建sqlSession的工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
//创建能执行映射文件中sql的sqlSession
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
8、创建测试类 CityService.java
package com.cp.myproject.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.cp.myproject.DbTools.DbTools;
import com.cp.myproject.bean.City;
import com.cp.myproject.mapper.CityMapper;
public class CityService {
/**
* 查询所有的记录
*/
private static void findAll(){
SqlSession session=DbTools.getSession();
CityMapper mapper=session.getMapper(CityMapper.class);
try {
List<City> user=mapper.findAll();
for(City citys:user){
System.out.println("name: "+citys.getName()+", district: "+citys.getDistrict()+", population: "+citys.getPopulation()+", countrycode: "+citys.getCountryCode());
}
//System.out.println(user.toString());
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 根据id查询记录
*/
private static void findbyid(){
SqlSession session=DbTools.getSession();
CityMapper mapper=session.getMapper(CityMapper.class);
try {
City city = mapper.selectById(1);
System.out.println("name: "+city.getName()+", district: "+city.getDistrict());
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 增加记录
*/
private static void insert(){
SqlSession session=DbTools.getSession();
CityMapper mapper=session.getMapper(CityMapper.class);
try {
City city = new City();
city.setName("aaa");
city.setCountryCode("aaa");
city.setDistrict("aaa");
mapper.insert(city);
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 记录更新
*/
public static void update(){
SqlSession session=DbTools.getSession();
CityMapper mapper=session.getMapper(CityMapper.class);
try {
City city = mapper.selectById(4081);
city.setDistrict("88888");
mapper.update(city);
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
/**
* 删除记录
*/
public static void delete(){
SqlSession session=DbTools.getSession();
CityMapper mapper=session.getMapper(CityMapper.class);
try {
mapper.delete(4080);
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}
}
public static void main(String[] args) {
// saveOrUpdate();
// delete();
// findAll();
findbyid();
// insert();
// update();
}
}
9、运行测试类 CityService.java
Run As---->Java Appliation