SSM框架学习之(一)Mybatis——原始Dao开发
首先看一下工程总体结构
配置Mybatis环境
导入相关Jar包
asm-3.3.1.jar cglib-2.2.2.jar commons-logging-1.1.1.jar javassist-3.17.1-GA.jar junit-4.9.jar log4j-1.2.17.jar log4j-api-2.0-rc1.jar log4j-core-2.0-rc1.jar mybatis-3.2.7.jar mysql-connector-java-5.1.7-bin.jar slf4j-api-1.7.5.jar slf4j-log4j12-1.7.5.jar
配置log4j属性文件
log4j.rootLogger=DEBUG,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.ConversionPattern=%5p [%t] - %n%n
配置Mysql属性文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=123
创建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> <properties resource="db.properties"/> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,事务控制由mybatis--> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> </mappers> </configuration>
Dao层和Service层开发
创建User实体类,类的成员属性对应数据库里的字段名,同时提供set和get方法
public class User { private int id; private String username; private String sex; private String birthday; private String address; ......
再就是编写Dao层接口
public interface UserDao { User findUserById(int id); List<User> findUserByName(String name); void addUser(User user); void delUser(int id); }
其次提供Dao的实现类
public class UserDaoImpl implements UserDao { private SqlSessionFactory factory; public UserDaoImpl(SqlSessionFactory factory) { this.factory = factory; } @Override public User findUserById(int id) { SqlSession session = factory.openSession(); User user = session.selectOne("test.findUserById", id); session.close(); return user; } @Override public List<User> findUserByName(String name) { SqlSession session = factory.openSession(); List<User> list= session.selectList("test.findUserByName", name); session.close(); return list; } @Override public void addUser(User user) { SqlSession session = factory.openSession(); session.insert("test.addUser", user); session.commit(); session.close(); } @Override public void delUser(int id) { SqlSession session = factory.openSession(); session.delete("test.delUser", id); session.commit(); session.close(); }
}
整合Mybatis
创建user.xml,根据Dao接口编写mapper映射文件
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="test"> <!-- 按ID查询用户 --> <select id="findUserById" parameterType="int" resultType="cn.allene.mybatis.first.po.User"> SELECT * FROM USER WHERE id=#{id} </select> <!-- 按名字模糊查询用户 --> <select id="findUserByName" parameterType="java.lang.String" resultType="cn.allene.mybatis.first.po.User"> SELECT * FROM USER WHERE username LIKE '%${value}%' </select> <!-- 添加用户 --> <insert id="addUser" parameterType="cn.allene.mybatis.first.po.User" > insert into user(username, birthday, sex, address) value(#{username}, #{birthday}, #{sex}, #{address}) </insert> <!-- 按ID删除用户 --> <delete id="delUser" parameterType="int"> delete from user where id=#{id} </delete> </mapper>
最后在SqlMapConfig.xml文件中添加user.xml映射文件
<mappers> <mapper resource="sqlmap/User.xml"/> </mappers>
最后测试Service层业务逻辑
这里使用到JUnit单元测试框架
public class UserTest {
SqlSessionFactory sqlSessionFactory;
@Before
public void before() throws IOException{
String resoure = "SqlMapConfig.xml";
InputStream urlAsStream = Resources.getResourceAsStream(resoure);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(urlAsStream);
}
@Test
public void findUserById(){
UserDao dao = new UserDaoImpl(sqlSessionFactory);
User user = dao.findUserById(1);
System.out.println(user);
}
@Test
public void findUserByName(){
UserDao dao = new UserDaoImpl(sqlSessionFactory);
List<User> users= dao.findUserByName("小");
System.out.println(users);
}
@Test
public void addUser(){
UserDao dao = new UserDaoImpl(sqlSessionFactory);
User user = new User(1, "张三", "男", System.currentTimeMillis()+"", "湖南省张家界市");
dao.addUser(user);
}
@Test
public void delUser(){
UserDao dao = new UserDaoImpl(sqlSessionFactory);
dao.delUser(24);
}
}