MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,而且更名为MyBatis,实质上Mybatis对ibatis进行一些改进。MyBatis是一个优秀的持久层框架,它对jdbc的操做数据库的过程进行封装,使开发者只须要关注 SQL 自己,而不须要花费精力去处理例如注册驱动、建立connection、建立statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。java
Mybatis经过xml或注解的方式将要执行的各类statement(statement、preparedStatemnt、CallableStatement)配置起来,并经过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。mysql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/easybuy
user=root
password=bdqn
# 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 configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="database.properties"></properties> <settings> <setting name="logImpl" value="LOG4J" /> </settings> <typeAliases> <package name="cn.bdqn.bean"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${user}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 引入映射文件 --> <mappers> <mapper resource="cn/bdqn/mapper/UserMapper.xml"/> </mappers> </configuration>
package cn.bdqn.dao; import java.util.List; import org.apache.ibatis.annotations.Param; import cn.bdqn.bean.User; public interface UserDao { User findUser(@Param("loginName")String name,@Param("password")String pwd); //查询 int findAdd(User user); //添加 int findDelUser(@Param("id")int id); //删除 int findUpate(User user); //修改 }
<?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="cn.bdqn.dao.UserDao">
<select id="findUser" resultType="User">
select * from easybuy_user where loginName=#{loginName} and password=#{password}
</select>
<insert id="findAdd" parameterType="User" > insert into easybuy_user(loginName,userName,password,sex,email,mobile) values(#{loginName},#{userName},#{password},#{sex},#{email},#{mobile}) </insert> <delete id="findDelUser"> delete from easybuy_user where id=#{id} </delete> <update id="findUpate" parameterType="User"> update easybuy_user set loginName=#{loginName},userName=#{userName},password=#{password},identityCode=#{identityCode},email=#{email},mobile=#{mobile},type=#{type} where id=#{id} </update> </mapper>
package cn.bdqn.util; 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; public class MybatisUtil { private static SqlSessionFactory ssf = null; private MybatisUtil(){} static{ try { InputStream ins = Resources.getResourceAsStream("mybatis-config.xml"); //建立SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(ins); } catch (IOException e) { e.printStackTrace(); } } public static SqlSessionFactory getSqlSessionFactory(){ return ssf; } }
package cn.bdqn.service.impl; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import cn.bdqn.bean.User; import cn.bdqn.dao.UserDao; import cn.bdqn.dao.impl.UserDaoImpl; import cn.bdqn.service.UserService; import cn.bdqn.util.MybatisUtil; public class UserServiceImpl implements UserService{ SqlSessionFactory sqlSessionFactory = MybatisUtil.getSqlSessionFactory(); private UserDao udao = new UserDaoImpl(); @Override public User findUser(String name, String pwd) { SqlSession session = sqlSessionFactory.openSession(); return session.getMapper(UserDao.class).findUser(name, pwd); } @Override public boolean Add(User user) { SqlSession session = sqlSessionFactory.openSession(); int add = session.getMapper(UserDao.class).findAdd(user); if (add>0) { session.commit(); return true; } return false; } @Override public boolean findDelUser(int id) { SqlSession session = sqlSessionFactory.openSession(); int uid = session.getMapper(UserDao.class).findDelUser(id); if(uid>0){ session.commit(); return true; } return false; } @Override public boolean findUpate(User user) { SqlSession session = sqlSessionFactory.openSession(); int uid = session.getMapper(UserDao.class).findUpate(user); if(uid>0){ session.commit(); return true; } return false; } }
#{}:至关于预处理中的占位符?。程序员
#{}里面的参数表示接收java输入参数的名称。sql
#{}能够接受HashMap、简单类型、POJO类型的参数。数据库
当接受简单类型的参数时,#{}里面能够是value,也能够是其余。apache
#{}能够防止SQL注入。session
${}:至关于拼接SQL串,对传入的值不作任何解释的原样输出。mybatis
${}会引发SQL注入,因此要谨慎使用。app
${}能够接受HashMap、简单类型、POJO类型的参数。框架
当接受简单类型的参数时,${}里面只能是value。
selectOne:只能查询0或1条记录,大于1条记录的话,会报错。
selectList:能够查询0或N条记录。
Mapper代理的开发方式,程序员只须要编写mapper接口(至关于dao接口)便可。Mybatis会自动的为mapper接口生成动态代理实现类。
不过要实现mapper代理的开发方式,须要遵循一些开发规范。
一、 mapper接口的全限定名要和mapper映射文件的namespace的值相同。
二、 mapper接口的方法名称要和mapper映射文件中的statement的id相同。
三、 mapper接口的方法参数只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致。
四、 mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致。