在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。
当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句
以下为项目图和数据库表
mybatis-config
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 指定使用LOG4J输出日志 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<!-- 配置包的别名,通常在使用类时需要使用类的全限定名称,使用该配置后只要直接使用类名即可 -->
<package name="com.etc.model"/>
</typeAliases>
<!-- 数据库环境 -->
<environments default="development">
<environment id="development">
<!-- 采用JDBC管理器方式 -->
<transactionManager type="JDBC"/>
<!-- POOLED采用mybabtis内部连接池方式 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="userMapping.xml"/>
</mappers>
</configuration>
mapper中namespace绑定接口
<?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.etc.dao.UserDao">
<insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into
users(name,password)
values(#{name},#{password})
</insert>
<insert id="insert2" parameterType="User" >
insert into
users(name,password)
values(#{name},#{password})
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
<select id="getById" parameterType="int" resultType="User">
select * from
users where id=#{id}
</select>
<delete id="deleteById" parameterType="int">
delete from
users where id=#{id}
</delete>
<select id="queryAll" resultType="User">
select * from users
</select>
<update id="updateById" parameterType="User">
update users
set
name=#{name},password=#{password}
where id=#{id}
</update>
</mapper>
log4j.properties
#全局配置
log4j.rootLogger=ERROR,stdout
#MyBatis日志配置
log4j.logger.com.etc.dao=TRACE
#控制台输出配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
UserDao
package com.etc.dao;
import com.etc.model.User;
import java.util.List;
public interface UserDao {
List<User> queryAll();
int insert(User user);
}
BaseMapper
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.Before;
import java.io.IOException;
import java.io.InputStream;
public class BaseMapper {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws IOException {
InputStream inputStream = null;
try {
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (Exception e){
e.printStackTrace();
}finally {
if (inputStream!=null){
inputStream.close();
}
}
}
public SqlSession getSqlSession(){
return this.sqlSessionFactory.openSession();
}
}
UserTest
import com.etc.model.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserTest extends BaseMapper {
@Test
public void testSelectAll(){
try {
SqlSession sqlSession = this.getSqlSession();
List<User> list = sqlSession.selectList("queryAll");
sqlSession.close();
for (User user : list){
System.out.println(user.getName()+"__"+user.getPassword());
}
}catch (Exception e){
e.printStackTrace();
}
}
@Test
public void testInsert(){
try {
User user = new User();
user.setName("龙宫");
user.setPassword("456");
SqlSession sqlSession = this.getSqlSession();
sqlSession.insert("insert",user);
sqlSession.commit();
sqlSession.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
效果图