初识mybatis,第一个简单的mybatis项目
声明:I‘m 初学者,这是我对mybytis的初步认识
这是一个简单的不能再简单的初级Mybatis项目,它可以使我们连接数据库更加容易,思路更加清晰。我这里用一个图来解释一下:
开始创建这个项目:
这是我项目中用的数据库,数据库名是store,表名person,属性如图
1.创建一个java项目
2.在项目中新建一个文件夹lib
3.把连接mysql的jar包和mybatis包放进去bulidpath一下
4.创建包目录如下
这里 com.dongline.mybatistest包存放的java代码,
config存放的全局配置文件和映射文件
5.在config下创建全局配置文件mybatisconfig.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> <!-- 全局配置文件 --> <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/store? characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
代码很多,信息量很大,但大多都是模版代码。
这里我关注的是dataSource
标签property代表的是属性。这里我们就能和以前Dao原始开发方式有点关联了。driver,url username,password属性就是以前我们初始化连接对象所用到的。
这里只需要把value值设置成自己数据库对应的值即可。
6.创建Person类
package com.dongline.mybatistest; public class Person { String personname; String persongpassword; int persongid; String personmail; @Override public String toString() { return "Person [personname=" + personname + ", persongpassword=" + persongpassword + ", persongid=" + persongid + ", personmail=" + personmail + "]"; } public String getPersonname() { return personname; } public void setPersonname(String personname) { this.personname = personname; } public String getPersongpassword() { return persongpassword; } public void setPersongpassword(String persongpassword) { this.persongpassword = persongpassword; } public int getPersongid() { return persongid; } public void setPersongid(int persongid) { this.persongid = persongid; } public String getPersonmail() { return personmail; } public void setPersonmail(String personmail) { this.personmail = personmail; } }
这里就是数据库中person表对应的Person类。它是数据库数据和java数据之间传递的载体。
7.在config文件夹添加person.xml映射文件
其中内容为
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <!-- 映射文件 --> <mapper namespace="test"> <select id="findPersonByName" resultType="com.dongline.mybatistest.Person" parameterType="java.lang.String"> select * from person where personname=#{id} </select> </mapper>
我们关注的是mapper标签namespace是我们自己设置的,为了避免工程中引用引起同名冲突,就像c++中的namespace一样。
mapper标签下可以配置我们的数据库增删改查逻辑这里我就不一一展示,我以查询为例
然后是一个select标签
这里id是我们调用这个select的唯一标识。
resultTpye是这个查询语句结果所对应的单个对象类型(当查询结果为List时每个结果的类型)
parameterType是输入类型我们看到sql语句中的personname=#{id} #{id}所对应的类型
其中#{}代表一个输入参数(是防sql注入的)
这里的输入和输出类型如果不是java简单类型都要加上包名。输入类型和输出类型都可以是我们自己创建的pojo
也就是我们sql和java 数据传递的载体
8.
我们映射文件配置好了但是没有与jdbc关联,这里就需要mybatis来关联我们的映射文件
在全局配置文件中添加
<mappers> <mapper resource="config/person.xml"/> </mappers>
就实现了映射文件的配置
mappers可以添加多个mapper那就意味着可以用这一个配置文件关联多个映射文件
9.用mybatis来实现查询数据库
在com.dongline.mybatistest下新建一个测试类Test.java
package com.dongline.mybatistest; import java.io.IOException; import java.io.InputStream; import javax.annotation.Resource; 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 Test { public static void main(String[] args) throws Exception { String resource="config/mybatisconfig.xml"; InputStream in= Resources.getResourceAsStream(resource); SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in); SqlSession session=factory.openSession(); Person person=session.selectOne("test.findPersonByName","dong"); System.out.println(person);
session.close();
} }
这里通过Resources.getResourceAsStream(resource)获取resource输入流
再获取SqlSessionFactory,这个是会话工厂。
建立我们的会话 session,
通过会话session中的增删改查关联我们映射文件中配置的id就能调用我们的sql语句了。
执行结果如下
第一次写blog有什么不足请大家指出。