好久没碰web,现在重新写个小项目,把用到的点都罗列出来。
1、与数据库对应的bean,要有一个默认的构造方法。
2、动态sql:基于OGNL表达式,就像jsp页面显示元素参数一样,可在参数为多个、有无传值做出不同的反应。
例如:if、
where、trim、foreach等
3、代码生成工具(网上有很多文章,但基本都是复制的,复制也就算了,TM的连字母都复制错,测试半天都不行......):
然后在cmd中,直接运行即可:
->java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
->java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
附(配置文件):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 数据库驱动包位置 --> <classPathEntry location="F:\MyGenerator\mysql-connector-java-5.1.36.jar" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- 数据库链接URL、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mytest?characterEncoding=utf8" userId="root" password="123"> <!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">--> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 生成模型的包名和位置 --> <javaModelGenerator targetPackage="liu.model" targetProject="F:\MyGenerator\src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 生成的映射文件包名和位置 --> <sqlMapGenerator targetPackage="liu.mapping" targetProject="F:\MyGenerator\src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 生成DAO的包名和位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="liu.dao" targetProject="F:\MyGenerator\src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 要生成那些表(更改tableName和domainObjectName就可以) --> <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" /> </context> </generatorConfiguration>
4、常见的配置:
例如User的配置如下:
<mapper namespace="com.liu.dao.UserDao"> <!-- mybsits_config中配置的alias类别名,也可直接配置resultType为类路劲 --> <select id="findUser" parameterType="String" resultType="com.liu.model.User"> <![CDATA[ select * from user where name=#{name} ]]> </select> <!-- 只有一个参数的时候 --> <select id="findNum" parameterType="String" resultType="int"> <![CDATA[ select userId from user where name='aa' ]]> </select> <!-- 有多个参数的时候,注意参数为Map<String,Object>,里面存储对应的参数名key和值 --> <select id="findNum2" resultType="int"> <![CDATA[ select count(userId) from user where 1=1 ]]> <if test="name != null"> AND name = #{name, jdbcType=VARCHAR} </if> </select> <resultMap type="com.liu.model.User" id="userMap"> <id column="userId" property="userId"/> <result column="name" property="name"/> <result column="qq" property="qq"/> <result column="phone" property="phone"/> </resultMap> <select id="getAllUser" resultMap="userMap"> select * from user </select> <insert id="insert" parameterType="com.liu.model.User" flushCache="true"> insert into user (userId, name, qq, phone) values (#{userId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{qq,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}) </insert> <insert id="insert2" parameterType="com.liu.model.User" flushCache="true"> insert into user <trim prefix="(" suffix=")" suffixOverrides=","> userId, name, qq, phone, </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> #{userId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{qq,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, </trim> </insert> <update id="update" parameterType="com.liu.model.User"> update user <trim prefix="set" suffixOverrides=","> <if test="name!=null">name=#{name},</if> <if test="qq!=null">qq=#{qq},</if> <if test="phone!=null">phone=#{phone},</if> </trim> where userId=#{userId} </update> <delete id="delete" parameterType="int"> delete from user where userId=#{userId} </delete> <!-- <insert id="save" parameterType="User"> insert into t_user(user_name,user_age) values(#{userName},#{age}) </insert> <update id="update" parameterType="User"> update t_user set user_name=#{userName},user_age=#{age} where user_id=#{id} </update> <delete id="delete" parameterType="int"> delete from t_user where user_id=#{id} </delete> <select id="findAll" resultType="User"> select user_id id,user_name userName,user_age age from t_user </select> --> </mapper>
<mapper namespace="com.liu.dao.LoginDao"> <select id="login" resultType="com.liu.model.User"> <![CDATA[ select * from user where userName=#{0} AND password = #{1} ]]> </select> <!-- 1、参数为Map<String,Object>();2、使用@Param注解,所以加起上面的总共三种传参数方式 --> <select id="login2" resultType="com.liu.model.User"> <![CDATA[ select * from user where userName=#{name,jdbcType=VARCHAR} AND password = #{password,jdbcType=VARCHAR} ]]> </select> </mapper>
附(配置中所用到的类型对照):
JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean BOOLEAN boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp CLOB Clob BLOB Blob ARRAY Array DISTINCT mapping of underlying type STRUCT Struct REF Ref DATALINK java.net.URL