Mybatis入门程序(eclipse+mysql workbench)
需求
根据产品的数量查询一条信息;
第一步:创建java工程
打开elipse软件,新建一个java工程,jdk使用jdk1.8.0;
第二步:添加以下jar包到项目中
- mysql数据驱动包:mysql-connector-java-5.1.36-bin.jar
- mybatis核心包:mybatis-3.2.7.jar
- mybatis依赖包(在mybatis文件夹中的lib文件夹里,全部拷进项目)
- junit包:junit-4.9.jar
第三步:编写配置文件log4j.properties
# Global logging configuration
#在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
#log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis默认使用log4j作为输出日志信息。
第四步:编写SqlMapConfig.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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis-->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/sql_bizhibihui?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!--添加映射条件 -->
<mappers>
<mapper resource="sqlmap/User.xml"/>
</mappers>
</configuration>
代码说明:
1. sql_bizhibihui是根据自己创建的数据库名称,因此名称并不唯一,以自己创建的名称为准;
2. passworkd后面的root为mysql的登录密码,因此也引人而异,这里我的密码设置的是root;
3. resource后面的sqlmap/User.xml中的sqlmap为创建的包名,User.xml为编写的映射文件名称。
第五步:编写po类用来接收statement对象
po类作为mybatis进行sql映射使用,po类通常与数据库表对应,User.java如下:
public class User {
private int order_num;
private int order_item;
private String prod_id;
private int quantity;
private BigDecimal item_price;
}
代码说明:
1. 除此之外,也要写get和set方法。
2. 以上新添的5个成员变量应与数据库中orderitems表中的字段个数和顺序一一对应,此外java中的字段数据类型也要与mysql中的具体字段对应起来。
3. 以下为数据库的orderitems表:
第六步:程序编写
1. 编写映射文件:
在classpath下的sqlmap目录下创建sql映射文件Users.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">
<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test">
<!-- 在 映射文件中配置很多sql语句 -->
<!-- 需求:通过id查询用户表的记录 -->
<!-- 通过 select执行数据库查询
id:标识 映射文件中的 sql
将sql语句封装到mappedStatement对象中,所以将id称为statement的id
parameterType:指定输入 参数的类型,这里指定int型
#{}表示一个占位符号
#{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称
resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。
-->
<select id="findUserById" parameterType="int" resultType="itcast.mybatis.po.User">
SELECT * FROM orderitems WHERE quantity=#{quantity}
</select>
</mapper>
代码说明:
1. namespace中的test为命名空间名称,可任意命名;
2. itcast.mybatis.po.User为User类具体的路径,其中还包括各种路径下的包名。
3. select语句是用来查询orderitems表中的字段quantity为某个具体值时的记录,而“#{}”是动态sql语句,想要详细了解可百度动态sql“#{}”和“${}”。
2. 测试程序
新建一个测试类MyBatisFirst.java:
package itcast.mybatis.first;
import java.io.IOException;
import java.io.InputStream;
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 org.junit.Test;
import itcast.mybatis.po.User;
public class MybatisFirst {
@Test
public void findUserByIdTest() {
//配置文件
String source="SqlMapConfig.xml";
InputStream inputstream=null;
//数据库会话
SqlSession sqlsession=null;
//会话工厂
SqlSessionFactory sqlsessionfactory=null;
try {
inputstream = Resources.getResourceAsStream(source);
//创建一个会话工厂
sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputstream);
//利用会话工厂创建一个会话
sqlsession=sqlsessionfactory.openSession();
//查询单个记录用selectOne方法
User user=sqlsession.selectOne("test.findUserById", 20);
//输出产品信息
System.out.println(user);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭会话
if(sqlsession!=null){
sqlsession.close();
}
}
}
}
代码说明:
selectOne方法中的第一个参数为String类型,内容为具体的statement对象,也就是User.xml文件中的命名空间test加上id为findUserById;第二个参数为sql查询语句中quantity字段的具体参数值。最后别忘了关闭会话。
以下是项目概览:
项目说明:项目中所有需要新建编写的文件为MybatisFirst.java,User.java,User.xml,log4j.properties和SqlMapConfig.xml共五个文件。