暑期之前就有打算学习SSM,但是我记得当时再配置一个框架疯狂报错,弄得我很难受,,再加上当时有点其他事情,所以就放了下来。现在很有需求要会ssm,所以就学了一下。感觉框架这东西配置就烦的要死。错一丁点就全错。。下面开始说配置详情。
介绍一下这些东西,将mybatis的jar包依赖放入lib目录。User类是一个bean对象,test类是一个测试类(就是要用到这个服务的)。conf.xml是全局配置,配置了数据库相关信息和数据库操作文件的映射(userMapper等数据库操作)。userMapper.xml封装了数据库操作给test调用。
首先,数据库创建数据库
1 create database mybatis; 2 use mybatis; 3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT); 4 INSERT INTO users(NAME, age) VALUES('hehe',15 ); //随便输入几条数据
在src目录下建立对应的user对象:
package com.test.mybits; public class User { private int id; private String name; private int age; public User(){} 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; } public int getage() { return age; } public void setage(int age) { this.age=age; } public String toString() { return "user [id=" id ",name=" name ",age=" age "]"; } }
这样bean对象就建好了。
下一步建立conf.xml,这个是一个全局配置的xml文件,里面包含连接数据库的相关信息,有个要注意的是要把 < DOCTYPE confi----/>这个写在头。
<?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="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="userMapper.xml"/> <mapper class="com.test.mapper.userMapper2"/> </mappers> </configuration>
这个和普通JDBC连接差不多。
下一步。创建userMapper.xml对象,进行相关配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"> <mapper namespace="userMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 根据id查询得到一个user对象 --> <select resultType="com.test.mybits.User" parameterType="Integer" id="getuser">select * from users where id=#{id} </select> <!-- 增删改查 --> <!-- 增 indesert --> <insert parameterType="com.test.mybits.User" id="adduser">insert into users(name,age) values(#{name},#{age}) </insert> <delete parameterType="Integer" id="deleteuser">delete from users where id=#{id} </delete> <update parameterType="com.test.mybits.User" id="updateuser">update users set name=#{name},age=#{age} where id=#{id} </update> <select resultType="com.test.mybits.User" id="datesearch">select * from users </select> </mapper>
最后编写test类
package com.test.test1; import java.io.IOException; import java.io.InputStream; 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.test.mybits.User; public class Test { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String resource="conf.xml"; //使用类加载mybatis驱动文件,(他也加载关联的附带文件) // InputStream is=Test.class.getClassLoader().getResourceAsStream(resource); //构建sqlsession工厂 // SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(is); // 使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) Reader reader = Resources.getResourceAsReader(resource); //构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //创建能执行映射文件中sql的sqlSession //创建sqlsession文件 SqlSession session=sessionFactory.openSession(); String statement="getuser"; User user=session.selectOne(statement,3); System.out.println(user); User user2=session.selectOne(statement,1); System.out.println(user2); //System.out.print(11); } }
运行输出为:
user [id=3,name=弟弟,age=22] user [id=1,name=张赛,age=21]
根据个人的数据库查询出不同结果。在main函数中,statement对应xml中配置的id。这个只是实现了简单的查询功能,后续的增删该查都是类似模块,就是要注意映射的一一对应和路径的问题。