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"></properties> <!-- 定义别名,包扫描方式,批量,,可以简化mapper.xml文件中参数的书写 --> <typeAliases> <package name="com.mybatis.model"/> </typeAliases> <environments default="development"> <environment id="development"> <!-- 事务 --> <transactionManager type="JDBC"></transactionManager> <!-- 连接池 --> <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> <mapper resource="config/sqlmap/UserMapper.xml"/> </mappers> </configuration>
UserDao
package com.mybatis.dao; import com.mybatis.model.User; public interface UserDao { //根据id查询user public User findUserById(int id) throws Exception; }
UserDaoImpl.java
package com.mybatis.dao.impl; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import com.mybatis.dao.UserDao; import com.mybatis.model.User; public class UserDaoImpl implements UserDao{ private SqlSessionFactory factory; //构造方法,获取SqlSessionFactory public UserDaoImpl(SqlSessionFactory factory) { this.factory=factory; } @Override public User findUserById(int id) throws Exception { //由于sqlsession是线程不安全的,所以最好在方法内定义 SqlSession session = factory.openSession(); // <T> T selectOne(String statement, Object parameter); //第一个参数是 命名空间.statement的id 第二个参数为传入参数 User user = session.selectOne("dao.find",id); session.close(); return user; } }
UserMapper.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="dao"> <!-- statement的id是find 输入参数类型是int 返回值参数类型是user(因为配置了别名,com.mybatis.model.User直接写为user,首字母大小写均可) #{}表示占位符 ${}表示拼接sql,相当于直接把值放入sql语句中,可能会有sql注入的问题,不建议使用 例子:select * from user where name = '%${name}%' --> <select id="find" parameterType="int" resultType="user"> select * from user where id=#{id} </select> </mapper>
测试方法
package com.mybatis.test; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import com.mybatis.dao.UserDao; import com.mybatis.dao.impl.UserDaoImpl; import com.mybatis.model.User; public class daoTest { private SqlSessionFactory sqlSessionFactory; @Before public void before() throws IOException{ //主配置文件路径 String resource = "config/SqlMapConfig.xml"; InputStream is = Resources.getResourceAsStream(resource); sqlSessionFactory=new SqlSessionFactoryBuilder().build(is); } @Test public void test() throws Exception { UserDao dao = new UserDaoImpl(sqlSessionFactory); User user = dao.findUserById(41); System.out.println(user); } }
db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatisdb jdbc.username=root jdbc.password=123456
log4j.properties
# Global logging configuration log4j.rootLogger=DEBUG, stdout # 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
主键返回的例子
<?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="test"> <insert id="addUser" parameterType="com.study.pojo.User"> <!-- 将插入数据的主键返回,返回到user对象中 select last_insert_id() 得到刚插入进去记录的主键值,只适用于自增主键 order="AFTER"表示在插入sql执行后执行 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select last_insert_id() </selectKey> insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address}) </insert> </mapper>