只要知道mybatis是操作数据库的,并且比JDBC轻量,就可以看下面的博客了。
先不去探究mybatis的技术原理那些,先从新建项目入手,分别熟悉mybatis在独立情况下、与mapper持久层、与spring整合、与maven项目,这四种情况下的文件配置和使用方法。大家可以选择自己要看的部分,跳过其他的即可。
我在博客里给出非常详细的、可执行的步骤,大家可以按照步骤,在工具Intellij IDEA上一步步实现,这样可以加深理解。我自己也找过很多类似的博客,有的只是给出了步骤,而没有代码;有的归纳的不清晰,比如mybatis和持久层mapper这一块,有的博客是直接用mapper接口的形式来操作数据库;有的却是直接用的session操作数据库。
所以,我这里给出的代码和步骤都是可实现的、完整的,就不会出现博客看到一半,代码不全的情况了(ps:我经常遇到这种情况)。
在进行下面的项目之前,首先当然要创建数据库和表结构,这一步其实相当重要,尤其是以后开发比较大型的Web项目时,表结构的设计关系到后面项目开发的成功与否。
<创建数据库、建表>(ps:sql语句大小写大家保持统一即可)
CREATE DATABASE how2java;
USE how2java;
CREATE TABLE category_ (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(32) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
下面就开始动手建项目。
一、在项目中独立使用mybatis
步骤1:在idea新建一个java工程,完成如下:
如图,新建的工程什么也没有,没关系,我们从头搞这个mybatis。
步骤2:导入mybatis的jar包。
执行:File->Project Structure...或者click 右上角的图标亦可。在弹出的界面选择Modules->Dependencies,单击右上角的“
+”,选择JARs or directories,然后导入你下载好的jar包。
这里的包只有2个:
mybatis-3.4.2.jar ; mysql-connector-java-5.0.8-bin.jar
这个jar包的版本选你下载的就行,不影响。我还不知道在CSDN这怎么上传这个包,所以,大家去网上下载吧,我下次把代码和项目挂到github上,大家直接去下就行。
步骤3:新建java bean类,这里是Category类,映射数据库的表category_;
如图所示,Category类为bean类,在com/how2java/pojo下新建映射文件Category.xml;在源目录src
下新建mybatis的主体配置文件mybatis-config.xml文件,目录结构如图所示。
<Category类的代码>:
package com.how2java.pojo; public class Category { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
<Category.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.how2java.pojo"> <select id="listCategory" resultType="Category"> select * from category_ </select> <select id="list" resultType="Category"> select * from category_ order by id desc <if test="start!=null and count!=null"> limit #{start},#{count} </if> </select> <select id="total" resultType="int"> select count(*) from category_ </select> <insert id="add" keyProperty="id" useGeneratedKeys="true" parameterType="Category" > insert into category_ ( name ) values (#{name}) </insert> <delete id="delete"> delete from category_ where id= #{id} </delete> <select id="get" resultType="Category"> select * from category_ where id= #{id} </select> <update id="update" parameterType="Category" > update category_ set name=#{name} where id=#{id} </update> </mapper>
<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> <typeAliases> <package name="com.how2java.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/how2java/pojo/Category.xml"/> </mappers> </configuration>大家只需将mybatis-config.xml中的数据库的密码“admin”改为自己的就可以运行了。
<测试代码>:
package com.how2java; //import com.how2java.mapper.CategoryMapper; //import com.Category; import com.how2java.pojo.Category; 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 java.io.IOException; import java.io.InputStream; import java.util.List; public class TestMybatis { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session=sqlSessionFactory.openSession(); //Category c=new Category(); List<Category> cs =session.selectList("list"); for(Category cc:cs){ System.out.println(cc.getName()); } } }
运行即可,控制台就会显示你数据库中的数据了。
我们注意到,在TestMybatis里,是用的session.selectList()方法,这是session调用方法,有的博客就是这么用的,还有一种方法,就是用持久层,看下面的第二节。
二、mybatis结合持久层mapper操作数据库
这种方法目前更为常用,更解耦,方便,安全等等,我们还是直接在项目中来看。
在第一节的基础上,继续修改即可。
Category类不用改;新增的接口CategoryMapper代码如下:
package com.how2java.mapper; import com.how2java.pojo.Category; import java.util.List; public interface CategoryMapper { //对于读取结果集 //定义方法 listCategory同Category.xml里面的对应 //查询所有的用户,返回类型为集合 List<Category> listCategory(); List<Category> list(); //总记录数 int total(); //添加 void add(Category category); //删除 void delete(int id); //查询 Category get(int id); //更新 void update(Category category); }
CategoryMapper.xml文件和上一节的Category.xml基本一样,只要改一个地方:将Category.xml里的命名空间改为:(就是CategoryMapper的位置,实现映射)
<mapper namespace="com.how2java.mapper.CategoryMapper">
同样的,mybatis-config.xml也只需要改一个地方:将之前的com/how2java/pojo/Category.xml改为如下即可:
<mappers> <mapper resource="com/how2java/CategoryMapper.xml"/> </mappers>测试代码也差不多:
package com.how2java; import java.io.IOException; import java.io.InputStream; import java.util.List; import com.how2java.mapper.CategoryMapper; 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.how2java.pojo.Category; public class TestMybatis { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session=sqlSessionFactory.openSession(); //Category c=new Category(); //List<Category>cs =session.selectList("listCategory",c); CategoryMapper mapper=session.getMapper(CategoryMapper.class); //List<Category> c= mapper.list(); Category c=new Category(); c.setId(12);c.setName("category124"); mapper.update(c); //System.out.println(c.getName()); /* for(Category cc:c){ System.out.println(cc.getName()); } */ } }只是在获得session之后,CategoryMapper mapper=session.getMapper(CategoryMapper.class);得到代理,然后mapper就可以调用前面接口里面的方法体,比如这里的update(Category category),传入参数就行了,同意能实现对数据库的CRUD等操作。
鉴于篇幅有点小长,我把后面2种整合情况单独写成一个博客,如果大家有兴趣的话,可以继续去看一下,谢谢。
参考链接:http://how2j.cn/k/mybatis/mybatis-tutorial/1087.html?p=12885