mybatis-config.xml的作用

mybatis-config.xml的作用

http://img1.sycdn.imooc.com//climg/5cf63b2700013f1308710471.jpg

三项配置虽然都有注释,但是还是看不懂,或者更准确的说不知道这个配置文件在哪里起了作用

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好。十分抱歉,这里讲解的不够准确,使同学对产生了些误解。

在xml中的settings元素中设置useGeneratedKeys是一个全局参数,但是只会对接口映射器产生影响,对xml映射器不起效。

1、在MyBatis中,允许设置名称为“useGeneratedKeys”参数存在3个位置:

1)在settings元素中设置useGeneratedKeys参数

2)在xml映射器中设置useGeneratedKeys参数

3)在接口映射器中设置useGeneratedKeys参数

2、接口映射的例子:

public interface TestMapper {    
    // 受全局useGeneratedKeys参数控制,添加记录之后将返回主键id
    @Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
    Integer insertOneTest(Test test);
}

但如果在接口映射器中又明确设置了useGeneratedKeys参数,那么注解映射器中的useGeneratedKeys参数值将覆盖settings元素中设置的全局useGeneratedKeys参数值。

3、xml映射器中配置的useGeneratedKeys参数只会对xml映射器产生影响,且在settings元素中设置的全局useGeneratedKeys参数值对于xml映射器不产生任何作用。

http://img1.sycdn.imooc.com//climg/5cf72ad9000124c109530407.jpg

所以想要表示的是,无论何种方式,对于支持自动生成记录主键的数据库,如:MySQL,SQL Server,设置useGeneratedKeys参数值为true,在执行添加记录之后可以获取到数据库自动生成的主键ID。

祝学习愉快~

  • 三又十二分之四 提问者 #1
    就是这个useGeneratedKeys这个只要有一个地方设置了就行了,是这个意思吧
    2019-06-05 11:29:51
  • 芝芝兰兰 回复 提问者 三又十二分之四 #2
    可以只设置一个,也可以设置多个。因为每个的作用范围是不一样的。
    2019-06-05 12:25:36
芝芝兰兰 2019-06-04 18:12:51

同学你好。

1、<setting name="useGeneratedKeys" value="true" />是使用jdbc的getGeneratedKeys获取数据库自增主键值,有了这个以后,在Dao.xml中新增时,就可以自动的将自增的主键填入到传入的参数对象中。例如:调用了shopDao.insertShop(shop)后,这个shop对象中就会有mysql生成的自增主键值了。

http://img1.sycdn.imooc.com//climg/5cf6426500013e0c09720377.jpg

2、<setting name="useColumnLabel" value="true" />和<setting name="mapUnderscoreToCamelCase" value="true" />分别是使用列标签替换列别名,和开启驼峰命名转换:Table{create_time} -> Entity{createTime}

有了他们,就可以在Dao.xml直接使用对应的列名的驼峰命名形式来命名实体类的属性。还是以上面截图为例。列名是create_time,实体类中的属性名为createTime,在Dao.xml中使用实体类的属性名,mysql会自动对应create_time列。

如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 提问者 三又十二分之四 #1
    对于1,可以理解为在mybatis-config.xml中写了 <setting name="useGeneratedKeys" value="true" />, 那么Dao.xml的<insert id="insertShop" useGeneratedKeys="true" keyColumn="shop_id" keyProperty="shopId> 语句中的useGeneratedKeys="true"就可以不写了 ---------------------------------------------- 对于2来说,如果没这两句话,那么就需要在Dao.xml中写resultMap,才能将类属性和字段匹配,有了,就直接哦那个resulttype就可以了,或者resulttype都不用写?
    2019-06-04 19:38:09
  • 芝芝兰兰 回复 提问者 三又十二分之四 #2
    useColumnLabel属性为true,其作用是:使用列标签代替列名。这时就可以使用Sql中的“as”将列名改为和实体类属性一致的别名,这时就可以使用resultType了。而使用了驼峰转换则省去了“as”的麻烦。
    2019-06-05 10:49:53
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师