一、环境
1.myeclipse10.7
2.数据库:mysql
3.jdk:jdk1.8
4.jar包:mybatis3.2.0.jar
mysql-connector-java-5.1.22-bin.jar log4j-1.2.16.jar
二、步骤
1.新建一个web工程:mybatis001。
将所需Jar包都拷贝到工程的WebRoot\WEB-INF\lib目录下(或者建一个java工程)
2.mysql新建一个数据库表:mybatis001
3.在表中增加2条信息
4.新建以下package
(1)src->com.roles
(2)src->com.roles->student
(3)src->com.roles->student->model
(4)src->com.roles->student->DAO(预留,所以这一节可以不建teacher这个包)
(5)src->com.roles->teacher(预留,所以这一节可以不建teacher这个包)
(6)src->config
(7)src->config->mybatis
(8)src->config->spring(预留,所以这一节可以不建spring这个包)
5.所有代码
(1)在src->com.roles->student->model下建一个Student类
<给不熟悉java或者myeclipse的朋友一个建议:在代码界面邮件点击,选择Source->Generate Getters and Setters..可以自动生成get()和set()函数>
package com.roles.student.model; /** * * @author code陈 * */ public class Student { private String name; //性别 1:男 0:女 private String gender; private int age; private String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
(2)在src目录下新建一个Configuration.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> <typeAlias alias="Student" type="com.roles.student.model.Student"/> </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://127.0.0.1:3306/mybatis001" /> <property name="username" value="root"/> <property name="password" value="mysql"/> </dataSource> </environment> </environments> <mappers> <mapper resource="config/mybatis/student.xml"/> </mappers> </configuration>
<解释>
(a)<typeAlias>将Student类取了一个别名,目的是为了方便,而不是必须得,如果不使用别名,就需要在任何需要Student的地方使用"com.roles.student.model.Student",显然别名方便多了。
(b)<environment>主要是初始化连接的数据库的信息:ip、端口、数据库表、用户名和密码等等
(c)<mappers>定义了sql查询语句的配置文件(比如student.xml),其实这个配置文件还能有表中字段名和实体类属性的映射关系,这个将在后面会学习到。
(3)在src->config->mybatis下新建一个student.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.roles.student.model.studentMapper"> <select id="getStudent" parameterType="String" resultType="Student"> select * from student where id = #{id} </select> </mapper>
<解释>
(a)namespace有点像package的意思,而都比较习惯用XXMapper的形式
(b)<select>这个就是sql语句了,id=“ getStudent”这个id相当于一个函数名字,如果我们要使用这条查询语句,调用这个id即可,后面将会用到。parameterType则是查询条件的类型,String、id、map等等,这个很重要,resultType查询结果返回类型,这个需要和Configuration.xml中相应类的别名保持一致。
(4)测试:在src目录下新建一个test包,包下新建一个test类(过程可以不用这么复杂,只是为了好管理代码而已)
package test; import config.mybatis.*; 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; import com.roles.student.model.Student; import java.io.IOException; public class test { /*** * 获得MyBatis SqlSessionFactory * SqlSessionFactory 负责创建SqlSession ,一旦创建成功,就可以用SqlSession实例来执行映射语句 * @return */ private static SqlSessionFactory getSessionFactory(){ SqlSessionFactory sessionFactory=null; String resource="Configuration.xml"; try { sessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource)); } catch (IOException e) { e.printStackTrace(); } return sessionFactory; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SqlSession session=getSessionFactory().openSession(); try{ //参数:映射文件的命名空间+sql语句id Student student = (Student)session.selectOne("com.roles.student.model.studentMapper.getStudent","2015051701"); System.out.println("姓名:"+student.getName()); String gender=student.getGender().equals("1")?"男":"女"; System.out.println("性别:"+gender); System.out.println("年龄:"+student.getAge()); System.out.println("学号:"+student.getId()); } catch (Exception e) { e.printStackTrace(); } finally{ session.close(); } } }
(5)整个工程目录结构如下:
(6)运行结果
<如果出现了警告,诸如:log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging)>
解决方法:在src目录下新建一个log4j.properties,内容为:
# Set root category priority to INFO and its only appender to CONSOLE. log4j.rootCategory=INFO, CONSOLE, LOGFILE #log4j.rootCategory=INFO, CONSOLE, # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, LOGFILE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold=INFO log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy:MM:dd HH:mm:ss:SSS} %-5p [%c{1}] %m%n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.LOGFILE.File=c\:konbao.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.Threshold=INFO log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{yyyy:MM:dd HH:mm:ss:SSS} [%24F:%-4L:%-5p]%x %m%n
三、各个配置文件之间的关系,大致如下~~~
以上内容为本人在学习mybatis时整理的笔记,个人理解的结果,如有问题,欢迎朋友们指正。